Compare commits

..

3 Commits

Author SHA1 Message Date
9420887392 more cleanup 2025-10-07 01:26:39 +02:00
7df84f1e81 better gpt tetris 4 2025-10-07 01:14:38 +02:00
4861d26d8a better 2025-10-07 00:29:04 +02:00
10 changed files with 797 additions and 215 deletions

View File

@@ -1,5 +1,5 @@
idf_component_register(SRCS
src/hello_world_main.cpp
src/app_main.cpp
src/display.cpp
src/bat_mon.cpp
src/spi_global.cpp
@@ -9,5 +9,5 @@ idf_component_register(SRCS
src/shutdowner.cpp
src/buttons.cpp
src/power_helper.cpp
PRIV_REQUIRES spi_flash esp_driver_i2c driver sdk-esp
PRIV_REQUIRES spi_flash esp_driver_i2c driver sdk-esp esp_timer
INCLUDE_DIRS "include")

View File

@@ -20,9 +20,10 @@ public:
void pooler(); // FIXME:
private:
static inline i2c_device_config_t _dev_cfg = {
.dev_addr_length = I2C_ADDR_BIT_LEN_7,
.device_address = 0x36,
.scl_speed_hz = 100000,
.dev_addr_length = I2C_ADDR_BIT_LEN_7,
.device_address = 0x36,
.scl_speed_hz = 100000,
.flags = 0,
};
BatMon();

View File

@@ -7,43 +7,43 @@
#include <display.hpp>
class DispTools {
public:
static DispTools& get();
void clear() {
namespace DispTools {
static void clear() {
for (int y = 0; y < DISP_HEIGHT; y++) {
for (int x = 0; x < DISP_WIDTH; x++) {
SMD::get().set_pixel(x, y, true);
SMD::set_pixel(x, y, true);
}
}
}
bool get_pixel(int x, int y) {
static bool get_pixel(int x, int y) {
if (x < 0 || x >= DISP_WIDTH || y < 0 || y >= DISP_HEIGHT)
assert(false);
assert(false); // Not implemented
return true;
// return disp_frame[y][x];
}
void reset_pixel(int x, int y) {
static void reset_pixel(int x, int y) {
if (x < 0 || x >= DISP_WIDTH || y < 0 || y >= DISP_HEIGHT)
assert(false);
SMD::get().set_pixel(x, y, false);
SMD::set_pixel(x, y, false);
}
void set_pixel(int x, int y) {
static void set_pixel(int x, int y) {
if (x < 0 || x >= DISP_WIDTH || y < 0 || y >= DISP_HEIGHT)
assert(false);
SMD::get().set_pixel(x, y, true);
SMD::set_pixel(x, y, true);
}
void set_pixel(int x, int y, bool on) {
static void set_pixel(int x, int y, bool on) {
if (on) {
set_pixel(x, y);
} else {
reset_pixel(x, y);
}
}
void draw_to_display();
static void draw_to_display() { SMD::draw(); }
static void draw_to_display_async_start() { SMD::draw_async_start(); }
static void draw_to_display_async_wait() { SMD::draw_async_wait(); }
static bool draw_to_display_async_busy() { return SMD::draw_async_busy(); }
};

View File

@@ -15,44 +15,47 @@
#include "Surface.hpp"
#include "Window.hpp"
class SMD {
public:
static constexpr size_t kLineBytes = DISP_WIDTH / 8;
static constexpr size_t kLineMultiSingle = (kLineBytes + 2);
static constexpr size_t kLineDataBytes = kLineMultiSingle * DISP_HEIGHT + 2;
namespace SMD {
static constexpr size_t kLineBytes = DISP_WIDTH / 8;
static constexpr size_t kLineMultiSingle = (kLineBytes + 2);
static constexpr size_t kLineDataBytes = kLineMultiSingle * DISP_HEIGHT + 2;
static DMA_ATTR uint8_t dma_buf[SMD::kLineDataBytes];
DMA_ATTR extern uint8_t dma_buf[SMD::kLineDataBytes];
static SMD& get();
void clear();
void draw();
void init();
void clear();
void draw();
// Asynchronous (DMA queued) draw API
void draw_async_start(); // queue frame transfer if none in flight
void draw_async_wait(); // wait for any in-flight transfer to finish
bool draw_async_busy(); // true if a transfer is in-flight
void set_pixel(int x, int y, bool value) {
assert(x >= 0 && x < DISP_WIDTH && y >= 0 && y < DISP_HEIGHT);
static void set_pixel(int x, int y, bool value) {
assert(x >= 0 && x < DISP_WIDTH && y >= 0 && y < DISP_HEIGHT);
unsigned lineIdx = 2 + kLineMultiSingle * y + (x / 8);
unsigned bitIdx = 1 << (7 - (x % 8)) % 8;
unsigned lineIdx = 2 + kLineMultiSingle * y + (x / 8);
unsigned bitIdx = 1 << (7 - (x % 8)) % 8;
if (value) {
dma_buf[lineIdx] &= ~bitIdx;
} else {
dma_buf[lineIdx] |= bitIdx;
}
if (value) {
dma_buf[lineIdx] &= ~bitIdx;
} else {
dma_buf[lineIdx] |= bitIdx;
}
}
private:
SMD();
static inline spi_device_interface_config_t _devcfg = {
.mode = 0, // SPI mode 0
.clock_speed_hz = 2 * 1000 * 1000, // Clock out at 10 MHz
.spics_io_num = SPI_DISP_CS, // CS pin
.flags = SPI_DEVICE_POSITIVE_CS,
.queue_size = 3,
// .pre_cb = lcd_spi_pre_transfer_callback, //Specify pre-transfer callback to handle D/C line
};
spi_device_handle_t _spi;
bool _vcom = false;
static inline spi_device_interface_config_t _devcfg = {
.mode = 0, // SPI mode 0
.clock_speed_hz = 2 * 1000 * 1000, // Clock out at 10 MHz
.spics_io_num = SPI_DISP_CS, // CS pin
.flags = SPI_DEVICE_POSITIVE_CS,
.queue_size = 3,
// .pre_cb = lcd_spi_pre_transfer_callback, //Specify pre-transfer callback to handle D/C line
};
extern spi_device_handle_t _spi;
extern bool _vcom;
extern bool _inFlight;
extern spi_transaction_t _tx; // persistent transaction struct for async API
}; // namespace SMD
class SMDSurface : public Surface<SMDSurface, BwPixel>, public StandardEventQueue<SMDSurface> {
public:

View File

@@ -17,7 +17,10 @@
#include "esp_chip_info.h"
#include "esp_flash.h"
#include "esp_pm.h" // power management (guard usage by CONFIG_PM_ENABLE)
#include "esp_private/esp_clk.h"
#include "esp_random.h"
#include "esp_system.h"
#include "esp_timer.h"
#include <algorithm>
#include <array>
@@ -46,9 +49,10 @@ constexpr int FrameW = 400;
constexpr int FrameH = 240;
// game feel
constexpr int DropMsStart = 650;
constexpr int DropMsMin = 90;
constexpr int DropFastMs = 20;
// Faster gravity & soft drop
constexpr int DropMsStart = 520; // was 650
constexpr int DropMsMin = 60; // was 90
constexpr int DropFastMs = 1; // soft drop interval (was 5)
constexpr int LevelStepClr = 10;
constexpr int LockDelayMs = 380;
@@ -94,14 +98,14 @@ struct PlatformFramebuffer final : IFramebuffer {
if (x < 0 || y < 0 || x >= width() || y >= height())
return;
// Logical ON must be BLACK on panel:
DispTools::get().set_pixel(x, y, on); // on=true -> black; on=false -> white
DispTools::set_pixel(x, y, on); // on=true -> black; on=false -> white
}
void clear(bool on) override {
// Explicit fill to guarantee polarity: no DispTools::clear() shortcuts.
for (int y = 0; y < height(); ++y)
for (int x = 0; x < width(); ++x)
DispTools::get().set_pixel(x, y, on);
DispTools::set_pixel(x, y, on);
}
};
@@ -129,15 +133,58 @@ struct PlatformClock final : IClock {
return (uint32_t) ((uint64_t) t * 1000ULL / configTICK_RATE_HZ);
}
void sleep_ms(uint32_t ms) override {
// Pass a longer delay when slow mode is active, cap normal delay for responsiveness
int slow_ms = (int) ms; // allow full requested sleep when slow
int normal_ms = (int) std::min<uint32_t>(ms, 30); // cap active-mode sleep to 30ms
// Unified: request same duration for slow and active. In slow mode a button press wakes early.
// In active mode we accept the full requested sleep (responsiveness governed by recommendedSleepMs cap).
int slow_ms = (int) ms;
int normal_ms = (int) ms; // no artificial cap
PowerHelper::get().delay(slow_ms, normal_ms);
}
};
static inline uint32_t elapsed_ms(uint32_t a, uint32_t b) { return b - a; }
// High precision performance stats (microsecond accumulation via esp_timer)
struct PerfStats {
// Accumulators (microseconds)
uint64_t overlayUs = 0, inputUs = 0, logicUs = 0, renderUs = 0, stepUs = 0;
uint64_t rClearUs = 0, rBoardUs = 0, rPiecesUs = 0, rHUDUs = 0, rOverlayUs = 0, rBlitQueueUs = 0, rBlitWaitUs = 0;
// Counters
uint32_t steps = 0; // number of step() iterations during interval
uint32_t renders = 0; // number of actual renders (paintHUD calls) during interval
uint64_t lastPrintUs = 0;
// Last-step / last-render snapshots
uint64_t lastOverlayUs = 0, lastInputUs = 0, lastLogicUs = 0, lastRenderUs = 0, lastStepUs = 0;
uint64_t lastRClearUs = 0, lastRBoardUs = 0, lastRPiecesUs = 0, lastRHUDUs = 0, lastROverlayUs = 0;
uint64_t lastRBlitQueueUs = 0, lastRBlitWaitUs = 0;
bool lastDidRender = false;
void maybePrint(uint64_t nowUs) {
if (!lastPrintUs)
lastPrintUs = nowUs;
uint64_t span = nowUs - lastPrintUs;
if (span >= 1000000ULL && (steps || renders)) {
double dSteps = steps ? (double) steps : 1.0;
double dRenders = renders ? (double) renders : 1.0;
auto avS = [&](uint64_t v) { return (double) v / 1000.0 / dSteps; };
auto avR = [&](uint64_t v) { return (double) v / 1000.0 / dRenders; };
double fps = renders * 1000000.0 / (double) span; // real display frame rate
printf("PERF steps=%lu frames=%lu span=%.3fs | stepAvg overlay=%.3fms input=%.3fms logic=%.3fms "
"step=%.3fms || renderAvg=%.3fms [clr=%.3f brd=%.3f pcs=%.3f hud=%.3f ovl=%.3f bltQ=%.3f bltW=%.3f] "
"fps=%.1f\n",
(unsigned long) steps, (unsigned long) renders, (double) span / 1e6, avS(overlayUs), avS(inputUs),
avS(logicUs), avS(stepUs), avR(renderUs), avR(rClearUs), avR(rBoardUs), avR(rPiecesUs), avR(rHUDUs),
avR(rOverlayUs), avR(rBlitQueueUs), avR(rBlitWaitUs), fps);
overlayUs = inputUs = logicUs = renderUs = stepUs = 0;
rClearUs = rBoardUs = rPiecesUs = rHUDUs = rOverlayUs = rBlitQueueUs = rBlitWaitUs = 0;
steps = renders = 0;
lastPrintUs = nowUs;
}
}
static PerfStats& get() {
static PerfStats ps;
return ps;
}
};
// ─────────────────────────────────────────────────────────────────────────────
// Pieces
using RotGrid = std::array<char, 16>;
@@ -358,26 +405,28 @@ public:
}
void render(const Board& b, int px, int py, int prot, int pidx, int score, int level, int lines, int nextIdx,
bool ghost, bool paused, bool gameOver) {
bool ghost, bool paused, bool gameOver, int fps, int avgFrameMs10) {
auto& ps = PerfStats::get();
auto tus = []() { return esp_timer_get_time(); };
uint64_t t0 = tus();
fb.clear(false); // white background
uint64_t t1 = tus();
ps.rClearUs += (t1 - t0);
ps.lastRClearUs = (t1 - t0);
drawBatteryOverlay();
// Outer playfield frame
rect(ox - 2, oy - 2, bw + 4, bh + 4, true);
// Draw settled cells (always full square borders for consistent look)
uint64_t t2 = tus();
for (int y = 0; y < cfg::BoardH; ++y)
for (int x = 0; x < cfg::BoardW; ++x) {
int v = b.get(x, y);
if (v)
drawCellFull(x, y, v, false);
}
// Ghost (classic outline per cell) BEFORE active so active isn't obscured
uint64_t t3 = tus();
ps.rBoardUs += (t3 - t2);
ps.lastRBoardUs = (t3 - t2);
if (ghost)
drawGhost(b, px, py, prot, pidx);
// Active piece overlay
for (int yy = 0; yy < 4; ++yy)
for (int xx = 0; xx < 4; ++xx)
if (cell_of(TET[pidx], prot, xx, yy)) {
@@ -385,10 +434,11 @@ public:
if (gx >= 0 && gx < cfg::BoardW && gy >= 0 && gy < cfg::BoardH)
drawCellFull(gx, gy, pidx + 1, true);
}
// HUD
int hudX = ox + bw + 16;
int yHUD = oy + 9;
uint64_t t4 = tus();
ps.rPiecesUs += (t4 - t3);
ps.lastRPiecesUs = (t4 - t3);
int hudX = ox + bw + 16;
int yHUD = oy + 9;
drawLabel(hudX, yHUD, "SCORE");
yHUD += 12;
drawNumber(hudX, yHUD, score);
@@ -403,7 +453,6 @@ public:
yHUD += 19;
drawLabel(hudX, yHUD, "NEXT");
yHUD += 7;
const int p = cfg::CellPx;
const int nx = hudX, ny = yHUD + 4;
rect(nx - 2, ny - 2, 4 * p + 4, 4 * p + 4, true);
@@ -411,12 +460,24 @@ public:
for (int xx = 0; xx < 4; ++xx)
if (cell_of(TET[nextIdx], 0, xx, yy))
drawCellFullPreview(nx + xx * p, ny + yy * p, nextIdx + 1);
// (Removed on request) Previously displayed FPS / frame ms here.
uint64_t t5 = tus();
ps.rHUDUs += (t5 - t4);
ps.lastRHUDUs = (t5 - t4);
if (gameOver)
drawGameOverOverlay();
else if (paused)
drawPausedOverlay();
DispTools::get().draw_to_display();
uint64_t t6 = tus();
ps.rOverlayUs += (t6 - t5);
ps.lastROverlayUs = (t6 - t5);
// Queue async SPI transfer (DMA) and measure only queue overhead here.
uint64_t bqStart = tus();
DispTools::draw_to_display_async_start();
uint64_t t7 = tus();
uint64_t qdur = (t7 - bqStart);
ps.rBlitQueueUs += qdur; // enqueue overhead
ps.lastRBlitQueueUs = qdur;
}
// Consistent full bordered cell drawing (square regardless of neighbors)
@@ -513,10 +574,23 @@ private:
int offset = ((w - 1) % spacing) / 2; // distributes leftover space equally
return ((xx - offset) % spacing) == 0;
}
case 2:
return (yy < h / 2) || (xx == 0); // J
case 3:
return (yy >= h / 2) || (xx == w - 1); // L
case 2: { // J — dense textured (≈75%) top half + solid left spine
if (xx == 0)
return true; // spine
if (yy < h / 2) {
// Omit only pixels where both coords are odd -> small isolated holes
return !((xx & 1) && (yy & 1));
}
return false;
}
case 3: { // L — dense textured (≈75%) bottom half + solid right spine
if (xx == w - 1)
return true; // spine
if (yy >= h / 2) {
return !((xx & 1) && (yy & 1));
}
return false;
}
case 4:
return (((xx + yy) & 1) == 0); // O
case 5:
@@ -766,7 +840,10 @@ private:
// Bag
class Bag {
public:
Bag() : rng(std::random_device{}()) { refill(); }
Bag() {
reseed();
refill();
}
int next() {
if (bag.empty())
refill();
@@ -774,8 +851,17 @@ public:
bag.pop_back();
return t;
}
void reset() { // reseed and refill new 7-bag
reseed();
refill();
}
private:
void reseed() {
// Use hardware RNG (non-blocking) instead of std::random_device (may block or be unsupported)
uint32_t seed = esp_random();
rng.seed(seed);
}
void refill() {
bag = {0, 1, 2, 3, 4, 5, 6};
std::shuffle(bag.begin(), bag.end(), rng);
@@ -787,7 +873,10 @@ private:
// ─────────────────────────────────────────────────────────────────────────────
// Game
struct ScoreState {
int level = 0, score = 0, lines = 0, dropMs = cfg::DropMsStart;
int level = 0;
int score = 0;
int lines = 0;
int dropMs = cfg::DropMsStart;
};
class Game {
@@ -802,29 +891,118 @@ public:
}
void step() {
const uint32_t now = clock.millis();
uint64_t stepStartUs = esp_timer_get_time();
uint32_t now = clock.millis();
PerfStats::get().lastDidRender = false; // reset per-frame render flag
// Complete any previous in-flight async display transfer and attribute its duration to blit time
if (DispTools::draw_to_display_async_busy()) {
uint64_t bwStart = esp_timer_get_time();
DispTools::draw_to_display_async_wait();
uint64_t bwEnd = esp_timer_get_time();
auto& ps = PerfStats::get();
uint64_t dur = (bwEnd - bwStart);
ps.rBlitWaitUs += dur; // actual DMA completion time
ps.lastRBlitWaitUs = dur;
}
const uint32_t oStart = clock.millis();
overlayTick(now);
InputState st = input.readState();
const uint32_t oEnd = clock.millis();
{
auto& ps = PerfStats::get();
uint64_t dur = (uint64_t) (oEnd - oStart) * 1000ULL;
ps.overlayUs += dur;
ps.lastOverlayUs = dur;
}
const uint32_t iStart = clock.millis();
InputState st = input.readState();
const uint32_t iEnd = clock.millis();
{
auto& ps = PerfStats::get();
uint64_t dur = (uint64_t) (iEnd - iStart) * 1000ULL;
ps.inputUs += dur;
ps.lastInputUs = dur;
}
uint64_t logicStartUs = esp_timer_get_time();
enforceSlowMode();
if (!running) {
// Allow restart on any button press (except no input)
if (st.left || st.right || st.down || st.rotate || st.back) {
restart();
return; // restart sets dirty and running
bool anyPressed = st.left || st.right || st.down || st.rotate || st.back;
uint32_t sinceGameOver = elapsed_ms(gameOverTime, now);
if (sinceGameOver >= gameOverRestartDelayMs) {
// Arm restart only after buttons are released once past delay
if (!anyPressed)
gameOverPrevPressed = false; // ready to accept a fresh press
else if (anyPressed && !gameOverPrevPressed) {
restart();
return;
}
}
// Maintain pressed state (prevents holding through the delay from triggering restart)
if (anyPressed)
gameOverPrevPressed = true;
uint64_t logicEndUs = esp_timer_get_time();
{
auto& ps = PerfStats::get();
uint64_t dur = (logicEndUs - logicStartUs);
ps.logicUs += dur;
ps.lastLogicUs = dur;
}
if (dirty)
paintHUD();
uint64_t stepEndUs = esp_timer_get_time();
{
auto& ps = PerfStats::get();
uint64_t dur = (stepEndUs - stepStartUs);
ps.stepUs += dur;
ps.lastStepUs = dur;
// Print per-frame breakdown (no render this frame if not dirty)
auto ms = [](uint64_t us) { return (double) us / 1000.0; };
double waitMs = ms(ps.lastRBlitWaitUs);
if (waitMs > 0.0005) {
printf("STEP overlay=%.3fms input=%.3fms logic=%.3fms bltW=%.3fms step=%.3fms\n",
ms(ps.lastOverlayUs), ms(ps.lastInputUs), ms(ps.lastLogicUs), waitMs, ms(ps.lastStepUs));
} else {
printf("STEP overlay=%.3fms input=%.3fms logic=%.3fms step=%.3fms\n", ms(ps.lastOverlayUs),
ms(ps.lastInputUs), ms(ps.lastLogicUs), ms(ps.lastStepUs));
}
ps.steps++;
ps.maybePrint(stepEndUs);
}
return;
}
// Pause toggle
if (st.back && !backPrev) {
paused = !paused;
PowerHelper::get().set_slow(paused);
dirty = true;
dirty = true;
}
backPrev = st.back;
if (paused) {
uint64_t logicEndUs = esp_timer_get_time();
{
auto& ps = PerfStats::get();
uint64_t dur = (logicEndUs - logicStartUs);
ps.logicUs += dur;
ps.lastLogicUs = dur;
}
if (dirty)
paintHUD();
uint64_t stepEndUs = esp_timer_get_time();
{
auto& ps = PerfStats::get();
uint64_t dur = (stepEndUs - stepStartUs);
ps.stepUs += dur;
ps.lastStepUs = dur;
auto ms = [](uint64_t us) { return (double) us / 1000.0; };
double waitMs = ms(ps.lastRBlitWaitUs);
if (waitMs > 0.0005) {
printf("STEP overlay=%.3fms input=%.3fms logic=%.3fms bltW=%.3fms step=%.3fms\n",
ms(ps.lastOverlayUs), ms(ps.lastInputUs), ms(ps.lastLogicUs), waitMs, ms(ps.lastStepUs));
} else {
printf("STEP overlay=%.3fms input=%.3fms logic=%.3fms step=%.3fms\n", ms(ps.lastOverlayUs),
ms(ps.lastInputUs), ms(ps.lastLogicUs), ms(ps.lastStepUs));
}
ps.steps++;
ps.maybePrint(stepEndUs);
}
return;
}
// Rotation
@@ -849,22 +1027,55 @@ public:
} else
touchingGround = false;
}
uint64_t logicEndUs = esp_timer_get_time();
{
auto& ps = PerfStats::get();
uint64_t dur = (logicEndUs - logicStartUs);
ps.logicUs += dur;
ps.lastLogicUs = dur;
}
if (dirty)
paintHUD();
uint64_t stepEndUs = esp_timer_get_time();
{
auto& ps = PerfStats::get();
uint64_t dur = (stepEndUs - stepStartUs);
ps.stepUs += dur;
ps.lastStepUs = dur;
auto ms = [](uint64_t us) { return (double) us / 1000.0; };
double waitMs = ms(ps.lastRBlitWaitUs);
if (waitMs > 0.0005) {
printf("STEP overlay=%.3fms input=%.3fms logic=%.3fms bltW=%.3fms step=%.3fms\n", ms(ps.lastOverlayUs),
ms(ps.lastInputUs), ms(ps.lastLogicUs), waitMs, ms(ps.lastStepUs));
} else {
printf("STEP overlay=%.3fms input=%.3fms logic=%.3fms step=%.3fms\n", ms(ps.lastOverlayUs),
ms(ps.lastInputUs), ms(ps.lastLogicUs), ms(ps.lastStepUs));
}
ps.steps++;
ps.maybePrint(stepEndUs);
}
}
uint32_t recommendedSleepMs(uint32_t now) const {
struct SleepPlan {
uint32_t slow_ms; // long sleep allowing battery/UI periodic refresh
uint32_t normal_ms; // short sleep for responsiveness on input wake
};
SleepPlan recommendedSleepMs(uint32_t now) const {
SleepPlan plan{0, 0};
if (dirty)
return 0;
if (paused || !running) {
uint32_t untilOverlay =
(lastOverlayUpd + overlayIntervalMs > now) ? (lastOverlayUpd + overlayIntervalMs - now) : 0;
uint32_t cap = (paused || !running) ? 2000u : 500u;
if (untilOverlay > cap)
untilOverlay = cap;
return untilOverlay;
return plan; // both zero => no sleep
bool idleState = paused || !running;
if (idleState) {
uint32_t interval = overlayIntervalMs * 8; // extended overlay refresh gap
uint32_t since = elapsed_ms(lastOverlayUpd, now);
uint32_t untilOverlay = (since >= interval) ? 0 : (interval - since);
if (untilOverlay > idleLongCapMs)
untilOverlay = idleLongCapMs;
plan.slow_ms = untilOverlay ? untilOverlay : idleShortPollMs;
plan.normal_ms = idleActivePollMs;
return plan;
}
// Estimate next gravity event
// Active gameplay
uint32_t g = score.dropMs;
uint32_t sinceFall = elapsed_ms(lastFall, now);
uint32_t untilDrop = (sinceFall >= g) ? 0 : (g - sinceFall);
@@ -873,18 +1084,27 @@ public:
uint32_t untilLock = (sinceTouch >= (uint32_t) cfg::LockDelayMs) ? 0 : (cfg::LockDelayMs - sinceTouch);
untilDrop = std::min(untilDrop, untilLock);
}
uint32_t untilOverlay =
(lastOverlayUpd + overlayIntervalMs > now) ? (lastOverlayUpd + overlayIntervalMs - now) : 0;
uint32_t sleep = std::min(untilDrop, untilOverlay);
uint32_t interval = overlayIntervalMs;
uint32_t sinceOverlay = elapsed_ms(lastOverlayUpd, now);
uint32_t untilOverlay = (sinceOverlay >= interval) ? 0 : (interval - sinceOverlay);
uint32_t sleep = std::min(untilDrop, untilOverlay);
if (sleep > maxIdleSleepMs)
sleep = maxIdleSleepMs;
return sleep;
plan.slow_ms = sleep;
plan.normal_ms = std::min<uint32_t>(sleep, activeNormalCapMs);
return plan;
}
private:
// Power-aware overlay throttling
static constexpr uint32_t overlayIntervalMs = 500; // base interval (paused uses multiplier)
static constexpr uint32_t maxIdleSleepMs = 120; // cap to keep input responsive
static constexpr uint32_t overlayIntervalMs = 500; // base interval (paused uses multiplier)
static constexpr uint32_t maxIdleSleepMs = 120; // active state cap to keep input responsive
static constexpr uint32_t gameOverRestartDelayMs = 2000; // ms grace period before restart allowed
// Idle (paused/game over) timing tunables
static constexpr uint32_t idleLongCapMs = 2500; // longest deep sleep slice while idle (<= overlay 4s)
static constexpr uint32_t idleShortPollMs = 50; // minimal periodic wake to check overlay refresh/input
static constexpr uint32_t idleActivePollMs = 40; // normal_ms provided to PowerHelper for responsiveness
static constexpr uint32_t activeNormalCapMs = 40; // cap for normal_ms during active play
IFramebuffer& fb;
IInput& input;
@@ -897,11 +1117,18 @@ private:
bool rotPrev = false, lHeld = false, rHeld = false, backPrev = false;
uint32_t lHoldStart = 0, rHoldStart = 0, lLastRep = 0, rLastRep = 0, lastFall = 0, touchTime = 0;
int current = 0, nextPiece = 0, px = 3, py = -2, rot = 0;
// Game over restart gating
uint32_t gameOverTime = 0; // time when game over occurred
bool gameOverPrevPressed = false; // tracks button hold through delay
// Dirty rendering & overlay
bool dirty = false;
uint32_t lastOverlayUpd = 0;
// Performance stats
uint32_t frameCount = 0, frameAccumMs = 0, lastFrameTime = 0, lastStatTime = 0;
int statFps = 0, statAvgFrameMs10 = 0;
void overlayTick(uint32_t now) {
uint32_t interval = (paused || !running) ? overlayIntervalMs * 8 : overlayIntervalMs; // 4s paused or game over
if (elapsed_ms(lastOverlayUpd, now) >= interval) {
@@ -909,21 +1136,61 @@ private:
dirty = true;
}
}
void enforceSlowMode() {
auto& ph = PowerHelper::get();
bool wantSlow = paused || !running;
if (wantSlow && !ph.is_slow())
ph.set_slow(true);
else if (!wantSlow && ph.is_slow())
ph.set_slow(false);
}
void paintHUD() {
uint64_t rStartUs = esp_timer_get_time();
uint32_t rStart = clock.millis();
// Frame boundary at render start
if (lastFrameTime != 0) {
uint32_t dt = elapsed_ms(lastFrameTime, rStart);
frameAccumMs += dt;
}
frameCount++;
lastFrameTime = rStart;
if (elapsed_ms(lastStatTime, rStart) >= 1000) {
statFps = frameCount;
statAvgFrameMs10 = frameCount ? (int) ((frameAccumMs * 10) / frameCount) : 0;
frameCount = 0;
frameAccumMs = 0;
lastStatTime = rStart;
}
renderer.render(board, px, py, rot, current, score.score, score.level, score.lines, nextPiece, true, paused,
!running);
!running, statFps, statAvgFrameMs10);
uint64_t rEndUs = esp_timer_get_time();
{
auto& ps = PerfStats::get();
uint64_t dur = (rEndUs - rStartUs);
ps.renderUs += dur;
ps.lastRenderUs = dur;
ps.lastDidRender = true;
ps.renders++;
// Pure per-frame render metrics (does not include asynchronous blit wait from previous frame)
auto ms = [](uint64_t us) { return (double) us / 1000.0; };
printf("FRAME render=%.3fms [clr=%.3f brd=%.3f pcs=%.3f hud=%.3f ovl=%.3f bltQ=%.3f]\n",
ms(ps.lastRenderUs), ms(ps.lastRClearUs), ms(ps.lastRBoardUs), ms(ps.lastRPiecesUs),
ms(ps.lastRHUDUs), ms(ps.lastROverlayUs), ms(ps.lastRBlitQueueUs));
}
dirty = false;
}
void restart() {
board.clear();
score = ScoreState{};
bag = Bag{}; // new sequence
score = ScoreState{};
bag.reset(); // new randomized sequence without reconstructing (avoids potential random_device issues)
nextPiece = bag.next();
running = true;
paused = false;
touchingGround = false;
rotPrev = lHeld = rHeld = backPrev = false;
PowerHelper::get().set_slow(false);
// slow mode will be re-evaluated centrally on next step
gameOverTime = 0;
gameOverPrevPressed = false;
spawn();
dirty = true;
}
@@ -937,7 +1204,10 @@ private:
dirty = true;
// Game over if immediate collision at spawn position OR unable to move one row down
if (board.collides(px, py, rot, current) || board.collides(px, py + 1, rot, current)) {
running = false;
running = false;
gameOverTime = clock.millis();
gameOverPrevPressed = true; // require a release after delay
// slow mode applied centrally next step
}
}
@@ -1015,7 +1285,10 @@ private:
board.lock(px, py, rot, current);
dirty = true;
if (above) { // immediate game over (do not spawn new piece)
running = false;
running = false;
gameOverTime = clock.millis();
gameOverPrevPressed = true;
// slow mode applied centrally next step
return;
}
int c = board.clearLines();
@@ -1043,11 +1316,16 @@ public:
~App() { delete game; }
void runForever() {
while (true) {
uint32_t now = clock.millis();
game->step();
uint32_t sleepMs = game->recommendedSleepMs(now);
if (sleepMs) {
clock.sleep_ms(sleepMs);
// Use time AFTER step for more accurate sleep scheduling (prevents fast loops when paused)
uint32_t now = clock.millis();
auto plan = game->recommendedSleepMs(now);
uint32_t sm = plan.slow_ms;
uint32_t nm = plan.normal_ms;
if (sm || nm) {
printf("Sleep slow=%lu normal=%lu %s\n", (unsigned long) sm, (unsigned long) nm,
PowerHelper::get().is_slow() ? "(slow)" : "");
PowerHelper::get().delay((int) sm, (int) nm);
}
}
}
@@ -1080,7 +1358,8 @@ extern "C" void app_main() {
I2cGlobal::get();
BatMon::get();
SpiGlobal::get();
DispTools::get().clear();
SMD::init();
DispTools::clear();
static PlatformFramebuffer fb;
static PlatformInput input;

View File

@@ -8,9 +8,3 @@
#include <display.hpp>
DispTools& DispTools::get() {
static DispTools disp_tools;
return disp_tools;
}
void DispTools::draw_to_display() { SMD::get().draw(); }

View File

@@ -13,9 +13,9 @@ void FbTty::draw_char(int col, int row) {
for (int y = 0; y < 16; y++) {
bool color = fonts_Terminess_Powerline[_buf[col][row]][y] & (1 << (8 - x));
if (color)
DispTools::get().set_pixel(col * 8 + x, row * 16 + y);
DispTools::set_pixel(col * 8 + x, row * 16 + y);
else
DispTools::get().reset_pixel(col * 8 + x, row * 16 + y);
DispTools::reset_pixel(col * 8 + x, row * 16 + y);
}
}
}

View File

@@ -11,18 +11,18 @@
#include "disp_tools.hpp"
DMA_ATTR uint8_t SMD::dma_buf[SMD::kLineDataBytes]{};
DMA_ATTR uint8_t SMD::dma_buf[SMD::kLineDataBytes]{};
spi_device_handle_t SMD::_spi;
bool SMD::_vcom = false;
bool SMD::_inFlight = false;
spi_transaction_t SMD::_tx{};
// This solution is attributed to Rich Schroeppel in the Programming Hacks section
// TODO: Why does the device flag not work?
unsigned char reverse_bits3(unsigned char b) { return (b * 0x0202020202ULL & 0x010884422010ULL) % 0x3ff; }
SMD& SMD::get() {
static SMD smd;
return smd;
}
SMD::SMD() {
void SMD::init() {
spi_bus_add_device(SPI_BUS, &_devcfg, &_spi);
ESP_ERROR_CHECK(gpio_reset_pin(SPI_DISP_DISP));
@@ -48,24 +48,51 @@ void SMD::clear() {
}
void SMD::draw() {
_vcom = !_vcom;
spi_transaction_t t{};
// Synchronous (blocking) version retained for compatibility
_vcom = !_vcom;
_tx = {};
_tx.tx_buffer = dma_buf;
_tx.length = SMD::kLineDataBytes * 8;
dma_buf[0] = 0b10000000 | (_vcom << 6);
ESP_ERROR_CHECK(spi_device_transmit(_spi, &_tx));
}
t.tx_buffer = dma_buf;
t.length = SMD::kLineDataBytes * 8;
dma_buf[0] = 0b10000000 | (_vcom << 6);
bool SMD::draw_async_busy() { return _inFlight; }
ESP_ERROR_CHECK(spi_device_transmit(_spi, &t));
void SMD::draw_async_start() {
if (_inFlight)
return; // already in flight
_vcom = !_vcom;
_tx = {};
_tx.tx_buffer = dma_buf;
_tx.length = SMD::kLineDataBytes * 8;
dma_buf[0] = 0b10000000 | (_vcom << 6);
esp_err_t err = spi_device_queue_trans(_spi, &_tx, 0);
if (err == ESP_OK)
_inFlight = true;
else
ESP_ERROR_CHECK(err);
}
void SMD::draw_async_wait() {
if (!_inFlight)
return;
spi_transaction_t* r = nullptr;
esp_err_t err;
// Wait indefinitely; could add timeout handling if desired
err = spi_device_get_trans_result(_spi, &r, portMAX_DELAY);
ESP_ERROR_CHECK(err);
_inFlight = false;
}
void SMDSurface::draw_pixel_impl(unsigned x, unsigned y, const BwPixel& pixel) {
if (pixel.on)
DispTools::get().set_pixel(x, y);
DispTools::set_pixel(x, y);
else
DispTools::get().reset_pixel(x, y);
DispTools::reset_pixel(x, y);
}
void SMDSurface::clear_impl() { DispTools::get().clear(); }
void SMDSurface::clear_impl() { DispTools::clear(); }
int SMDSurface::get_width_impl() const { return DISP_WIDTH; }

View File

@@ -1,6 +1,6 @@
#
# Automatically generated file. DO NOT EDIT.
# Espressif IoT Development Framework (ESP-IDF) 5.5.0 Project Configuration
# Espressif IoT Development Framework (ESP-IDF) 5.5.1 Project Configuration
#
CONFIG_SOC_CAPS_ECO_VER_MAX=102
CONFIG_SOC_ADC_SUPPORTED=y
@@ -438,9 +438,9 @@ CONFIG_BOOTLOADER_PROJECT_VER=1
# end of Application Rollback
#
# Bootloader Rollback
# Recovery Bootloader and Rollback
#
# end of Bootloader Rollback
# end of Recovery Bootloader and Rollback
CONFIG_BOOTLOADER_OFFSET_IN_FLASH=0x0
CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE=y
@@ -525,6 +525,7 @@ CONFIG_ESP_ROM_HAS_RETARGETABLE_LOCKING=y
CONFIG_ESP_ROM_GET_CLK_FREQ=y
CONFIG_ESP_ROM_HAS_HAL_WDT=y
CONFIG_ESP_ROM_HAS_HAL_SYSTIMER=y
CONFIG_ESP_ROM_SYSTIMER_INIT_PATCH=y
CONFIG_ESP_ROM_HAS_HEAP_TLSF=y
CONFIG_ESP_ROM_TLSF_CHECK_PATCH=y
CONFIG_ESP_ROM_MULTI_HEAP_WALK_PATCH=y
@@ -612,9 +613,9 @@ CONFIG_PARTITION_TABLE_MD5=y
#
# Compiler options
#
CONFIG_COMPILER_OPTIMIZATION_DEBUG=y
# CONFIG_COMPILER_OPTIMIZATION_DEBUG is not set
# CONFIG_COMPILER_OPTIMIZATION_SIZE is not set
# CONFIG_COMPILER_OPTIMIZATION_PERF is not set
CONFIG_COMPILER_OPTIMIZATION_PERF=y
# CONFIG_COMPILER_OPTIMIZATION_NONE is not set
CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y
# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT is not set
@@ -803,13 +804,13 @@ CONFIG_BT_NIMBLE_SVC_GAP_CENT_ADDR_RESOLUTION=-1
# end of GAP device name write permissions
#
# PPCP settings
# Peripheral Preferred Connection Parameters (PPCP) settings
#
CONFIG_BT_NIMBLE_SVC_GAP_PPCP_MAX_CONN_INTERVAL=0
CONFIG_BT_NIMBLE_SVC_GAP_PPCP_MIN_CONN_INTERVAL=0
CONFIG_BT_NIMBLE_SVC_GAP_PPCP_SLAVE_LATENCY=0
CONFIG_BT_NIMBLE_SVC_GAP_PPCP_SUPERVISION_TMO=0
# end of PPCP settings
# end of Peripheral Preferred Connection Parameters (PPCP) settings
CONFIG_BT_NIMBLE_SVC_GAP_NAME_WRITE_PERM=0
CONFIG_BT_NIMBLE_SVC_GAP_NAME_WRITE_PERM_ENC=0
@@ -826,6 +827,7 @@ CONFIG_BT_NIMBLE_SVC_GAP_NAME_WRITE_PERM_AUTHOR=0
# CONFIG_BT_NIMBLE_HOST_ALLOW_CONNECT_WITH_SCAN is not set
# CONFIG_BT_NIMBLE_HOST_QUEUE_CONG_CHECK is not set
# CONFIG_BT_NIMBLE_GATTC_PROC_PREEMPTION_PROTECT is not set
# CONFIG_BT_NIMBLE_GATTC_AUTO_PAIR is not set
#
# Host-controller Transport
@@ -863,6 +865,7 @@ CONFIG_BT_LE_CONTROLLER_TASK_STACK_SIZE=4096
# CONFIG_BT_LE_ASSERT_WHEN_ABNORMAL_DISCONN_ENABLED is not set
# CONFIG_BT_LE_DEBUG_REMAIN_SCENE_ENABLED is not set
# CONFIG_BT_LE_PTR_CHECK_ENABLED is not set
# CONFIG_BT_LE_MEM_CHECK_ENABLED is not set
# end of Controller debug features
CONFIG_BT_LE_LL_RESOLV_LIST_SIZE=4
@@ -919,6 +922,15 @@ CONFIG_BT_CTRL_SCAN_BACKOFF_UPPERLIMITMAX=32
CONFIG_BT_LE_CTRL_ADV_DATA_LENGTH_ZERO_AUX=y
CONFIG_BT_LE_RXBUF_OPT_ENABLED=y
CONFIG_BT_LE_CTRL_FAST_CONN_DATA_TX_EN=y
#
# Reserved Memory Config
#
CONFIG_BT_LE_EXT_ADV_RESERVED_MEMORY_COUNT=2
CONFIG_BT_LE_CONN_RESERVED_MEMORY_COUNT=2
# end of Reserved Memory Config
# CONFIG_BT_LE_DTM_ENABLED is not set
# end of Controller Options
#
@@ -926,6 +938,7 @@ CONFIG_BT_LE_CTRL_FAST_CONN_DATA_TX_EN=y
#
CONFIG_BT_ALARM_MAX_NUM=50
# CONFIG_BT_BLE_LOG_SPI_OUT_ENABLED is not set
# CONFIG_BT_BLE_LOG_UHCI_OUT_ENABLED is not set
# end of Common Options
# CONFIG_BT_HCI_LOG_DEBUG_EN is not set
@@ -1038,6 +1051,7 @@ CONFIG_ESP_TLS_USE_DS_PERIPHERAL=y
# CONFIG_ESP_TLS_SERVER_MIN_AUTH_MODE_OPTIONAL is not set
# CONFIG_ESP_TLS_PSK_VERIFICATION is not set
# CONFIG_ESP_TLS_INSECURE is not set
CONFIG_ESP_TLS_DYN_BUF_STRATEGY_SUPPORTED=y
# end of ESP-TLS
#
@@ -1450,9 +1464,11 @@ CONFIG_ESP_PHY_RF_CAL_PARTIAL=y
# CONFIG_ESP_PHY_RF_CAL_NONE is not set
# CONFIG_ESP_PHY_RF_CAL_FULL is not set
CONFIG_ESP_PHY_CALIBRATION_MODE=0
CONFIG_ESP_PHY_PLL_TRACK_PERIOD_MS=1000
# CONFIG_ESP_PHY_PLL_TRACK_DEBUG is not set
# CONFIG_ESP_PHY_RECORD_USED_TIME is not set
CONFIG_ESP_PHY_IRAM_OPT=y
# CONFIG_ESP_PHY_DEBUG is not set
# end of PHY
#
@@ -1513,6 +1529,7 @@ CONFIG_ESP_CRYPTO_DPA_PROTECTION_LEVEL=1
# CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_64 is not set
CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_96=y
CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=96
CONFIG_ESP_SYSTEM_IN_IRAM=y
# CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT is not set
CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT=y
# CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT is not set
@@ -1693,7 +1710,6 @@ CONFIG_FREERTOS_IDLE_TIME_BEFORE_SLEEP=3
#
# Port
#
CONFIG_FREERTOS_TASK_FUNCTION_WRAPPER=y
# CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK is not set
CONFIG_FREERTOS_TLSP_DELETION_CALLBACKS=y
# CONFIG_FREERTOS_TASK_PRE_DELETION_HOOK is not set
@@ -1867,7 +1883,7 @@ CONFIG_LWIP_DHCP_DOES_ARP_CHECK=y
# CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set
CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y
# CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set
CONFIG_LWIP_DHCP_OPTIONS_LEN=68
CONFIG_LWIP_DHCP_OPTIONS_LEN=69
CONFIG_LWIP_NUM_NETIF_CLIENT_DATA=0
CONFIG_LWIP_DHCP_COARSE_TIMER_SECS=1
@@ -2032,6 +2048,7 @@ CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN=4096
# CONFIG_MBEDTLS_X509_TRUSTED_CERT_CALLBACK is not set
# CONFIG_MBEDTLS_SSL_CONTEXT_SERIALIZATION is not set
CONFIG_MBEDTLS_SSL_KEEP_PEER_CERTIFICATE=y
# CONFIG_MBEDTLS_SSL_KEYING_MATERIAL_EXPORT is not set
CONFIG_MBEDTLS_PKCS7_C=y
# end of mbedTLS v3.x related
@@ -2286,7 +2303,8 @@ CONFIG_SPI_FLASH_WRITE_CHUNK_SIZE=8192
#
# Auto-detect flash chips
#
CONFIG_SPI_FLASH_VENDOR_XMC_SUPPORTED=y
CONFIG_SPI_FLASH_VENDOR_XMC_SUPPORT_ENABLED=y
CONFIG_SPI_FLASH_VENDOR_GD_SUPPORT_ENABLED=y
# CONFIG_SPI_FLASH_SUPPORT_ISSI_CHIP is not set
# CONFIG_SPI_FLASH_SUPPORT_MXIC_CHIP is not set
# CONFIG_SPI_FLASH_SUPPORT_GD_CHIP is not set
@@ -2412,9 +2430,9 @@ CONFIG_LOG_BOOTLOADER_LEVEL=3
CONFIG_FLASHMODE_DIO=y
# CONFIG_FLASHMODE_DOUT is not set
CONFIG_MONITOR_BAUD=115200
CONFIG_OPTIMIZATION_LEVEL_DEBUG=y
CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG=y
CONFIG_COMPILER_OPTIMIZATION_DEFAULT=y
# CONFIG_OPTIMIZATION_LEVEL_DEBUG is not set
# CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG is not set
# CONFIG_COMPILER_OPTIMIZATION_DEFAULT is not set
# CONFIG_OPTIMIZATION_LEVEL_RELEASE is not set
# CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE is not set
CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED=y

View File

@@ -1,11 +1,13 @@
#
# Automatically generated file. DO NOT EDIT.
# Espressif IoT Development Framework (ESP-IDF) 5.4.0 Project Configuration
# Espressif IoT Development Framework (ESP-IDF) 5.5.1 Project Configuration
#
CONFIG_SOC_CAPS_ECO_VER_MAX=102
CONFIG_SOC_ADC_SUPPORTED=y
CONFIG_SOC_ANA_CMPR_SUPPORTED=y
CONFIG_SOC_DEDICATED_GPIO_SUPPORTED=y
CONFIG_SOC_UART_SUPPORTED=y
CONFIG_SOC_UHCI_SUPPORTED=y
CONFIG_SOC_GDMA_SUPPORTED=y
CONFIG_SOC_AHB_GDMA_SUPPORTED=y
CONFIG_SOC_ASYNC_MEMCPY_SUPPORTED=y
@@ -45,6 +47,7 @@ CONFIG_SOC_ECDSA_SUPPORTED=y
CONFIG_SOC_FLASH_ENC_SUPPORTED=y
CONFIG_SOC_SECURE_BOOT_SUPPORTED=y
CONFIG_SOC_BOD_SUPPORTED=y
CONFIG_SOC_VBAT_SUPPORTED=y
CONFIG_SOC_APM_SUPPORTED=y
CONFIG_SOC_PMU_SUPPORTED=y
CONFIG_SOC_LP_TIMER_SUPPORTED=y
@@ -60,10 +63,12 @@ CONFIG_SOC_DEEP_SLEEP_SUPPORTED=y
CONFIG_SOC_MODEM_CLOCK_SUPPORTED=y
CONFIG_SOC_PM_SUPPORTED=y
CONFIG_SOC_XTAL_SUPPORT_32M=y
CONFIG_SOC_XTAL_CLOCK_PATH_DEPENDS_ON_TOP_DOMAIN=y
CONFIG_SOC_AES_SUPPORT_DMA=y
CONFIG_SOC_AES_GDMA=y
CONFIG_SOC_AES_SUPPORT_AES_128=y
CONFIG_SOC_AES_SUPPORT_AES_256=y
CONFIG_SOC_AES_SUPPORT_PSEUDO_ROUND_FUNCTION=y
CONFIG_SOC_ADC_DIG_CTRL_SUPPORTED=y
CONFIG_SOC_ADC_DIG_IIR_FILTER_SUPPORTED=y
CONFIG_SOC_ADC_MONITOR_SUPPORTED=y
@@ -167,7 +172,10 @@ CONFIG_SOC_I2S_SUPPORTS_PLL_F64M=y
CONFIG_SOC_I2S_SUPPORTS_PCM=y
CONFIG_SOC_I2S_SUPPORTS_PDM=y
CONFIG_SOC_I2S_SUPPORTS_PDM_TX=y
CONFIG_SOC_I2S_SUPPORTS_PCM2PDM=y
CONFIG_SOC_I2S_SUPPORTS_PDM_RX=y
CONFIG_SOC_I2S_PDM_MAX_TX_LINES=2
CONFIG_SOC_I2S_PDM_MAX_RX_LINES=1
CONFIG_SOC_I2S_SUPPORTS_TDM=y
CONFIG_SOC_I2S_TDM_FULL_DATA_WIDTH=y
CONFIG_SOC_I2S_SUPPORT_SLEEP_RETENTION=y
@@ -188,6 +196,7 @@ CONFIG_SOC_PCNT_UNITS_PER_GROUP=4
CONFIG_SOC_PCNT_CHANNELS_PER_UNIT=2
CONFIG_SOC_PCNT_THRES_POINT_PER_UNIT=2
CONFIG_SOC_PCNT_SUPPORT_RUNTIME_THRES_UPDATE=y
CONFIG_SOC_PCNT_SUPPORT_STEP_NOTIFY=y
CONFIG_SOC_PCNT_SUPPORT_SLEEP_RETENTION=y
CONFIG_SOC_RMT_GROUPS=1
CONFIG_SOC_RMT_TX_CANDIDATES_PER_GROUP=2
@@ -227,7 +236,9 @@ CONFIG_SOC_PARLIO_TX_CLK_SUPPORT_GATING=y
CONFIG_SOC_PARLIO_RX_CLK_SUPPORT_GATING=y
CONFIG_SOC_PARLIO_RX_CLK_SUPPORT_OUTPUT=y
CONFIG_SOC_PARLIO_TRANS_BIT_ALIGN=y
CONFIG_SOC_PARLIO_TX_SUPPORT_LOOP_TRANSMISSION=y
CONFIG_SOC_PARLIO_SUPPORT_SLEEP_RETENTION=y
CONFIG_SOC_PARLIO_SUPPORT_SPI_LCD=y
CONFIG_SOC_MPI_MEM_BLOCKS_NUM=4
CONFIG_SOC_MPI_OPERATIONS_NUM=3
CONFIG_SOC_RSA_MAX_BIT_LEN=3072
@@ -270,7 +281,6 @@ CONFIG_SOC_SPI_MEM_SUPPORT_WRAP=y
CONFIG_SOC_MEMSPI_SRC_FREQ_64M_SUPPORTED=y
CONFIG_SOC_MEMSPI_SRC_FREQ_32M_SUPPORTED=y
CONFIG_SOC_MEMSPI_SRC_FREQ_16M_SUPPORTED=y
CONFIG_SOC_MEMSPI_FLASH_CLK_SRC_IS_INDEPENDENT=y
CONFIG_SOC_SYSTIMER_COUNTER_NUM=2
CONFIG_SOC_SYSTIMER_ALARM_NUM=3
CONFIG_SOC_SYSTIMER_BIT_WIDTH_LO=32
@@ -293,6 +303,7 @@ CONFIG_SOC_TIMER_SUPPORT_SLEEP_RETENTION=y
CONFIG_SOC_MWDT_SUPPORT_XTAL=y
CONFIG_SOC_MWDT_SUPPORT_SLEEP_RETENTION=y
CONFIG_SOC_TWAI_CONTROLLER_NUM=1
CONFIG_SOC_TWAI_MASK_FILTER_NUM=1
CONFIG_SOC_TWAI_CLK_SUPPORT_XTAL=y
CONFIG_SOC_TWAI_BRP_MIN=2
CONFIG_SOC_TWAI_BRP_MAX=32768
@@ -314,9 +325,14 @@ CONFIG_SOC_SUPPORT_SECURE_BOOT_REVOKE_KEY=y
CONFIG_SOC_FLASH_ENCRYPTED_XTS_AES_BLOCK_MAX=64
CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES=y
CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES_128=y
CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES_SUPPORT_PSEUDO_ROUND=y
CONFIG_SOC_APM_CTRL_FILTER_SUPPORTED=y
CONFIG_SOC_CRYPTO_DPA_PROTECTION_SUPPORTED=y
CONFIG_SOC_ECC_CONSTANT_TIME_POINT_MUL=y
CONFIG_SOC_ECDSA_USES_MPI=y
CONFIG_SOC_ECDSA_SUPPORT_DETERMINISTIC_MODE=y
CONFIG_SOC_ECDSA_SUPPORT_HW_DETERMINISTIC_LOOP=y
CONFIG_SOC_ECDSA_P192_CURVE_DEFAULT_DISABLED=y
CONFIG_SOC_UART_NUM=2
CONFIG_SOC_UART_HP_NUM=2
CONFIG_SOC_UART_FIFO_LEN=128
@@ -326,6 +342,12 @@ CONFIG_SOC_UART_SUPPORT_XTAL_CLK=y
CONFIG_SOC_UART_SUPPORT_WAKEUP_INT=y
CONFIG_SOC_UART_SUPPORT_FSM_TX_WAIT_SEND=y
CONFIG_SOC_UART_SUPPORT_SLEEP_RETENTION=y
CONFIG_SOC_UART_WAKEUP_CHARS_SEQ_MAX_LEN=5
CONFIG_SOC_UART_WAKEUP_SUPPORT_ACTIVE_THRESH_MODE=y
CONFIG_SOC_UART_WAKEUP_SUPPORT_FIFO_THRESH_MODE=y
CONFIG_SOC_UART_WAKEUP_SUPPORT_START_BIT_MODE=y
CONFIG_SOC_UART_WAKEUP_SUPPORT_CHAR_SEQ_MODE=y
CONFIG_SOC_UHCI_NUM=1
CONFIG_SOC_COEX_HW_PTI=y
CONFIG_SOC_EXTERNAL_COEX_ADVANCE=y
CONFIG_SOC_PHY_DIG_REGS_MEM_SIZE=21
@@ -349,13 +371,16 @@ CONFIG_SOC_PM_CPU_RETENTION_BY_SW=y
CONFIG_SOC_PM_MODEM_RETENTION_BY_REGDMA=y
CONFIG_SOC_PM_SUPPORT_DEEPSLEEP_CHECK_STUB_ONLY=y
CONFIG_SOC_PM_RETENTION_SW_TRIGGER_REGDMA=y
CONFIG_SOC_PM_SUPPORT_PMU_CLK_ICG=y
CONFIG_SOC_CLK_RC_FAST_SUPPORT_CALIBRATION=y
CONFIG_SOC_CLK_XTAL32K_SUPPORTED=y
CONFIG_SOC_CLK_OSC_SLOW_SUPPORTED=y
CONFIG_SOC_CLK_RC32K_SUPPORTED=y
CONFIG_SOC_CLK_LP_FAST_SUPPORT_LP_PLL=y
CONFIG_SOC_CLK_LP_FAST_SUPPORT_XTAL_D2=y
CONFIG_SOC_MODEM_CLOCK_IS_INDEPENDENT=y
CONFIG_SOC_RCC_IS_INDEPENDENT=y
CONFIG_SOC_CLK_ANA_I2C_MST_HAS_ROOT_GATE=y
CONFIG_SOC_TEMPERATURE_SENSOR_SUPPORT_FAST_RC=y
CONFIG_SOC_TEMPERATURE_SENSOR_SUPPORT_XTAL=y
CONFIG_SOC_TEMPERATURE_SENSOR_INTR_SUPPORT=y
@@ -371,6 +396,7 @@ CONFIG_SOC_BLE_DEVICE_PRIVACY_SUPPORTED=y
CONFIG_SOC_BLE_POWER_CONTROL_SUPPORTED=y
CONFIG_SOC_BLE_MULTI_CONN_OPTIMIZATION=y
CONFIG_SOC_BLE_PERIODIC_ADV_ENH_SUPPORTED=y
CONFIG_SOC_BLE_CTE_SUPPORTED=y
CONFIG_SOC_DEBUG_HAVE_OCD_STUB_BINS=y
CONFIG_IDF_CMAKE=y
CONFIG_IDF_TOOLCHAIN="gcc"
@@ -405,6 +431,17 @@ CONFIG_BOOTLOADER_COMPILE_TIME_DATE=y
CONFIG_BOOTLOADER_PROJECT_VER=1
# end of Bootloader manager
#
# Application Rollback
#
# CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE is not set
# end of Application Rollback
#
# Recovery Bootloader and Rollback
#
# end of Recovery Bootloader and Rollback
CONFIG_BOOTLOADER_OFFSET_IN_FLASH=0x0
CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE=y
# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_DEBUG is not set
@@ -413,6 +450,8 @@ CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE=y
#
# Log
#
CONFIG_BOOTLOADER_LOG_VERSION_1=y
CONFIG_BOOTLOADER_LOG_VERSION=1
# CONFIG_BOOTLOADER_LOG_LEVEL_NONE is not set
# CONFIG_BOOTLOADER_LOG_LEVEL_ERROR is not set
# CONFIG_BOOTLOADER_LOG_LEVEL_WARN is not set
@@ -427,6 +466,13 @@ CONFIG_BOOTLOADER_LOG_LEVEL=3
# CONFIG_BOOTLOADER_LOG_COLORS is not set
CONFIG_BOOTLOADER_LOG_TIMESTAMP_SOURCE_CPU_TICKS=y
# end of Format
#
# Settings
#
CONFIG_BOOTLOADER_LOG_MODE_TEXT_EN=y
CONFIG_BOOTLOADER_LOG_MODE_TEXT=y
# end of Settings
# end of Log
#
@@ -442,7 +488,6 @@ CONFIG_BOOTLOADER_REGION_PROTECTION_ENABLE=y
CONFIG_BOOTLOADER_WDT_ENABLE=y
# CONFIG_BOOTLOADER_WDT_DISABLE_IN_USER_CODE is not set
CONFIG_BOOTLOADER_WDT_TIME_MS=9000
# CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE is not set
# CONFIG_BOOTLOADER_SKIP_VALIDATE_IN_DEEP_SLEEP is not set
# CONFIG_BOOTLOADER_SKIP_VALIDATE_ON_POWER_ON is not set
# CONFIG_BOOTLOADER_SKIP_VALIDATE_ALWAYS is not set
@@ -480,11 +525,13 @@ CONFIG_ESP_ROM_HAS_RETARGETABLE_LOCKING=y
CONFIG_ESP_ROM_GET_CLK_FREQ=y
CONFIG_ESP_ROM_HAS_HAL_WDT=y
CONFIG_ESP_ROM_HAS_HAL_SYSTIMER=y
CONFIG_ESP_ROM_SYSTIMER_INIT_PATCH=y
CONFIG_ESP_ROM_HAS_HEAP_TLSF=y
CONFIG_ESP_ROM_TLSF_CHECK_PATCH=y
CONFIG_ESP_ROM_MULTI_HEAP_WALK_PATCH=y
CONFIG_ESP_ROM_HAS_LAYOUT_TABLE=y
CONFIG_ESP_ROM_HAS_SPI_FLASH=y
CONFIG_ESP_ROM_HAS_SPI_FLASH_MMAP=y
CONFIG_ESP_ROM_WITHOUT_REGI2C=y
CONFIG_ESP_ROM_HAS_NEWLIB=y
CONFIG_ESP_ROM_HAS_NEWLIB_NANO_FORMAT=y
@@ -497,6 +544,8 @@ CONFIG_ESP_ROM_USB_OTG_NUM=-1
CONFIG_ESP_ROM_HAS_VERSION=y
CONFIG_ESP_ROM_SUPPORT_DEEP_SLEEP_WAKEUP_STUB=y
CONFIG_ESP_ROM_HAS_OUTPUT_PUTC_FUNC=y
CONFIG_ESP_ROM_NO_USB_SERIAL_OUTPUT_API=y
CONFIG_ESP_ROM_HAS_SUBOPTIMAL_NEWLIB_ON_MISALIGNED_MEMORY=y
#
# Boot ROM Behavior
@@ -507,6 +556,13 @@ CONFIG_BOOT_ROM_LOG_ALWAYS_ON=y
# CONFIG_BOOT_ROM_LOG_ON_GPIO_LOW is not set
# end of Boot ROM Behavior
#
# ESP-TEE (Trusted Execution Environment)
#
# CONFIG_SECURE_ENABLE_TEE is not set
CONFIG_SECURE_TEE_LOG_LEVEL=0
# end of ESP-TEE (Trusted Execution Environment)
#
# Serial flasher config
#
@@ -557,9 +613,9 @@ CONFIG_PARTITION_TABLE_MD5=y
#
# Compiler options
#
# CONFIG_COMPILER_OPTIMIZATION_DEBUG is not set
CONFIG_COMPILER_OPTIMIZATION_DEBUG=y
# CONFIG_COMPILER_OPTIMIZATION_SIZE is not set
CONFIG_COMPILER_OPTIMIZATION_PERF=y
# CONFIG_COMPILER_OPTIMIZATION_PERF is not set
# CONFIG_COMPILER_OPTIMIZATION_NONE is not set
CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y
# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT is not set
@@ -637,6 +693,8 @@ CONFIG_BT_NIMBLE_ROLE_CENTRAL=y
CONFIG_BT_NIMBLE_ROLE_PERIPHERAL=y
CONFIG_BT_NIMBLE_ROLE_BROADCASTER=y
CONFIG_BT_NIMBLE_ROLE_OBSERVER=y
CONFIG_BT_NIMBLE_GATT_CLIENT=y
CONFIG_BT_NIMBLE_GATT_SERVER=y
# CONFIG_BT_NIMBLE_NVS_PERSIST is not set
# CONFIG_BT_NIMBLE_SMP_ID_RESET is not set
CONFIG_BT_NIMBLE_SECURITY_ENABLE=y
@@ -645,11 +703,14 @@ CONFIG_BT_NIMBLE_SM_SC=y
# CONFIG_BT_NIMBLE_SM_SC_DEBUG_KEYS is not set
CONFIG_BT_NIMBLE_LL_CFG_FEAT_LE_ENCRYPTION=y
CONFIG_BT_NIMBLE_SM_LVL=0
CONFIG_BT_NIMBLE_SM_SC_ONLY=0
CONFIG_BT_NIMBLE_PRINT_ERR_NAME=y
# CONFIG_BT_NIMBLE_DEBUG is not set
# CONFIG_BT_NIMBLE_DYNAMIC_SERVICE is not set
CONFIG_BT_NIMBLE_SVC_GAP_DEVICE_NAME="nimble"
CONFIG_BT_NIMBLE_GAP_DEVICE_NAME_MAX_LEN=31
CONFIG_BT_NIMBLE_ATT_PREFERRED_MTU=256
CONFIG_BT_NIMBLE_ATT_MAX_PREP_ENTRIES=64
CONFIG_BT_NIMBLE_SVC_GAP_APPEARANCE=0
#
@@ -669,13 +730,13 @@ CONFIG_BT_NIMBLE_L2CAP_COC_SDU_BUFF_COUNT=1
# end of Memory Settings
CONFIG_BT_NIMBLE_GATT_MAX_PROCS=4
# CONFIG_BT_NIMBLE_HS_FLOW_CTRL is not set
CONFIG_BT_NIMBLE_RPA_TIMEOUT=900
# CONFIG_BT_NIMBLE_MESH is not set
CONFIG_BT_NIMBLE_CRYPTO_STACK_MBEDTLS=y
CONFIG_BT_NIMBLE_HS_STOP_TIMEOUT_MS=2000
CONFIG_BT_NIMBLE_ENABLE_CONN_REATTEMPT=y
CONFIG_BT_NIMBLE_MAX_CONN_REATTEMPT=3
# CONFIG_BT_NIMBLE_HANDLE_REPEAT_PAIRING_DELETION is not set
CONFIG_BT_NIMBLE_50_FEATURE_SUPPORT=y
CONFIG_BT_NIMBLE_LL_CFG_FEAT_LE_2M_PHY=y
CONFIG_BT_NIMBLE_LL_CFG_FEAT_LE_CODED_PHY=y
@@ -685,7 +746,9 @@ CONFIG_BT_NIMBLE_ENABLE_PERIODIC_SYNC=y
CONFIG_BT_NIMBLE_MAX_PERIODIC_SYNCS=0
CONFIG_BT_NIMBLE_MAX_PERIODIC_ADVERTISER_LIST=5
# CONFIG_BT_NIMBLE_BLE_POWER_CONTROL is not set
# CONFIG_BT_NIMBLE_AOA_AOD is not set
# CONFIG_BT_NIMBLE_GATT_CACHING is not set
# CONFIG_BT_NIMBLE_INCL_SVC_DISCOVERY is not set
CONFIG_BT_NIMBLE_WHITELIST_SIZE=12
# CONFIG_BT_NIMBLE_TEST_THROUGHPUT_TEST is not set
# CONFIG_BT_NIMBLE_BLUFI_ENABLE is not set
@@ -693,19 +756,42 @@ CONFIG_BT_NIMBLE_USE_ESP_TIMER=y
# CONFIG_BT_NIMBLE_BLE_GATT_BLOB_TRANSFER is not set
#
# GAP Service
# BLE Services
#
CONFIG_BT_NIMBLE_PROX_SERVICE=y
CONFIG_BT_NIMBLE_ANS_SERVICE=y
CONFIG_BT_NIMBLE_CTS_SERVICE=y
CONFIG_BT_NIMBLE_HTP_SERVICE=y
CONFIG_BT_NIMBLE_IPSS_SERVICE=y
CONFIG_BT_NIMBLE_TPS_SERVICE=y
CONFIG_BT_NIMBLE_IAS_SERVICE=y
CONFIG_BT_NIMBLE_LLS_SERVICE=y
CONFIG_BT_NIMBLE_SPS_SERVICE=y
CONFIG_BT_NIMBLE_HR_SERVICE=y
# CONFIG_BT_NIMBLE_HID_SERVICE is not set
CONFIG_BT_NIMBLE_BAS_SERVICE=y
# CONFIG_BT_NIMBLE_SVC_BAS_BATTERY_LEVEL_NOTIFY is not set
CONFIG_BT_NIMBLE_DIS_SERVICE=y
# CONFIG_BT_NIMBLE_SVC_DIS_MANUFACTURER_NAME is not set
# CONFIG_BT_NIMBLE_SVC_DIS_SERIAL_NUMBER is not set
# CONFIG_BT_NIMBLE_SVC_DIS_HARDWARE_REVISION is not set
# CONFIG_BT_NIMBLE_SVC_DIS_FIRMWARE_REVISION is not set
# CONFIG_BT_NIMBLE_SVC_DIS_SOFTWARE_REVISION is not set
# CONFIG_BT_NIMBLE_SVC_DIS_SYSTEM_ID is not set
# CONFIG_BT_NIMBLE_SVC_DIS_PNP_ID is not set
# CONFIG_BT_NIMBLE_SVC_DIS_INCLUDED is not set
CONFIG_BT_NIMBLE_GAP_SERVICE=y
#
# GAP Appearance write permissions
#
# CONFIG_BT_NIMBLE_SVC_GAP_APPEAR_WRITE is not set
# end of GAP Appearance write permissions
CONFIG_BT_NIMBLE_SVC_GAP_APPEAR_WRITE_PERM=0
CONFIG_BT_NIMBLE_SVC_GAP_APPEAR_WRITE_PERM_ENC=0
CONFIG_BT_NIMBLE_SVC_GAP_APPEAR_WRITE_PERM_ATHN=0
CONFIG_BT_NIMBLE_SVC_GAP_APPEAR_WRITE_PERM_ATHR=0
# end of GAP Appearance write permissions
CONFIG_BT_NIMBLE_SVC_GAP_CAR_CHAR_NOT_SUPP=y
# CONFIG_BT_NIMBLE_SVC_GAP_CAR_NOT_SUPP is not set
# CONFIG_BT_NIMBLE_SVC_GAP_CAR_SUPP is not set
@@ -717,27 +803,31 @@ CONFIG_BT_NIMBLE_SVC_GAP_CENT_ADDR_RESOLUTION=-1
# CONFIG_BT_NIMBLE_SVC_GAP_NAME_WRITE is not set
# end of GAP device name write permissions
CONFIG_BT_NIMBLE_SVC_GAP_NAME_WRITE_PERM=0
CONFIG_BT_NIMBLE_SVC_GAP_NAME_WRITE_PERM_ENC=0
CONFIG_BT_NIMBLE_SVC_GAP_NAME_WRITE_PERM_AUTHEN=0
CONFIG_BT_NIMBLE_SVC_GAP_NAME_WRITE_PERM_AUTHOR=0
#
# Peripheral Preferred Connection Parameters (PPCP) settings
#
CONFIG_BT_NIMBLE_SVC_GAP_PPCP_MAX_CONN_INTERVAL=0
CONFIG_BT_NIMBLE_SVC_GAP_PPCP_MIN_CONN_INTERVAL=0
CONFIG_BT_NIMBLE_SVC_GAP_PPCP_SLAVE_LATENCY=0
CONFIG_BT_NIMBLE_SVC_GAP_PPCP_SUPERVISION_TMO=0
# end of GAP Service
# end of Peripheral Preferred Connection Parameters (PPCP) settings
#
# BLE Services
#
# CONFIG_BT_NIMBLE_HID_SERVICE is not set
CONFIG_BT_NIMBLE_SVC_GAP_NAME_WRITE_PERM=0
CONFIG_BT_NIMBLE_SVC_GAP_NAME_WRITE_PERM_ENC=0
CONFIG_BT_NIMBLE_SVC_GAP_NAME_WRITE_PERM_AUTHEN=0
CONFIG_BT_NIMBLE_SVC_GAP_NAME_WRITE_PERM_AUTHOR=0
# CONFIG_BT_NIMBLE_SVC_GAP_GATT_SECURITY_LEVEL is not set
# CONFIG_BT_NIMBLE_SVC_GAP_RPA_ONLY is not set
# end of BLE Services
# CONFIG_BT_NIMBLE_VS_SUPPORT is not set
# CONFIG_BT_NIMBLE_OPTIMIZE_MULTI_CONN is not set
# CONFIG_BT_NIMBLE_ENC_ADV_DATA is not set
# CONFIG_BT_NIMBLE_HIGH_DUTY_ADV_ITVL is not set
# CONFIG_BT_NIMBLE_HOST_ALLOW_CONNECT_WITH_SCAN is not set
# CONFIG_BT_NIMBLE_HOST_QUEUE_CONG_CHECK is not set
# CONFIG_BT_NIMBLE_GATTC_PROC_PREEMPTION_PROTECT is not set
# CONFIG_BT_NIMBLE_GATTC_AUTO_PAIR is not set
#
# Host-controller Transport
@@ -748,6 +838,9 @@ CONFIG_BT_NIMBLE_HCI_UART_FLOW_CTRL=0
CONFIG_BT_NIMBLE_HCI_UART_RTS_PIN=19
CONFIG_BT_NIMBLE_HCI_UART_CTS_PIN=23
# end of Host-controller Transport
CONFIG_BT_NIMBLE_EATT_CHAN_NUM=0
# CONFIG_BT_NIMBLE_SUBRATE is not set
# end of NimBLE Options
#
@@ -763,10 +856,22 @@ CONFIG_BT_LE_HCI_INTERFACE_USE_RAM=y
CONFIG_BT_LE_CONTROLLER_NPL_OS_PORTING_SUPPORT=y
CONFIG_BT_LE_CONTROLLER_TASK_STACK_SIZE=4096
#
# Controller debug features
#
# CONFIG_BT_LE_CONTROLLER_LOG_ENABLED is not set
# CONFIG_BT_LE_ERROR_SIM_ENABLED is not set
# CONFIG_BT_LE_ASSERT_WHEN_ABNORMAL_DISCONN_ENABLED is not set
# CONFIG_BT_LE_DEBUG_REMAIN_SCENE_ENABLED is not set
# CONFIG_BT_LE_PTR_CHECK_ENABLED is not set
# CONFIG_BT_LE_MEM_CHECK_ENABLED is not set
# end of Controller debug features
CONFIG_BT_LE_LL_RESOLV_LIST_SIZE=4
CONFIG_BT_LE_LL_DUP_SCAN_LIST_COUNT=20
CONFIG_BT_LE_LL_SCA=60
# CONFIG_BT_LE_LL_PEER_SCA_SET_ENABLE is not set
# CONFIG_BT_LE_COEX_PHY_CODED_TX_RX_TLIM_EN is not set
CONFIG_BT_LE_COEX_PHY_CODED_TX_RX_TLIM_DIS=y
CONFIG_BT_LE_COEX_PHY_CODED_TX_RX_TLIM_EFF=0
@@ -802,12 +907,38 @@ CONFIG_BT_LE_DFT_TX_POWER_LEVEL_P9=y
# CONFIG_BT_LE_DFT_TX_POWER_LEVEL_P20 is not set
CONFIG_BT_LE_DFT_TX_POWER_LEVEL_DBM_EFF=9
# CONFIG_BT_LE_CTRL_CHECK_CONNECT_IND_ACCESS_ADDRESS is not set
# CONFIG_BT_CTRL_RUN_IN_FLASH_ONLY is not set
#
# BLE disconnects when Instant Passed (0x28) occurs
#
# CONFIG_BT_LE_CTRL_LLCP_CONN_UPDATE is not set
# CONFIG_BT_LE_CTRL_LLCP_CHAN_MAP_UPDATE is not set
# CONFIG_BT_LE_CTRL_LLCP_PHY_UPDATE is not set
# end of BLE disconnects when Instant Passed (0x28) occurs
CONFIG_BT_CTRL_SCAN_BACKOFF_UPPERLIMITMAX=32
# CONFIG_BT_LE_CTRL_CHAN_ASS_EN is not set
CONFIG_BT_LE_CTRL_ADV_DATA_LENGTH_ZERO_AUX=y
CONFIG_BT_LE_RXBUF_OPT_ENABLED=y
CONFIG_BT_LE_CTRL_FAST_CONN_DATA_TX_EN=y
#
# Reserved Memory Config
#
CONFIG_BT_LE_EXT_ADV_RESERVED_MEMORY_COUNT=2
CONFIG_BT_LE_CONN_RESERVED_MEMORY_COUNT=2
# end of Reserved Memory Config
# CONFIG_BT_LE_DTM_ENABLED is not set
# end of Controller Options
#
# Common Options
#
CONFIG_BT_ALARM_MAX_NUM=50
# CONFIG_BT_BLE_LOG_SPI_OUT_ENABLED is not set
# CONFIG_BT_BLE_LOG_UHCI_OUT_ENABLED is not set
# end of Common Options
# CONFIG_BT_HCI_LOG_DEBUG_EN is not set
@@ -826,15 +957,16 @@ CONFIG_BT_ALARM_MAX_NUM=50
#
#
# TWAI Configuration
# Legacy TWAI Driver Configurations
#
# CONFIG_TWAI_ISR_IN_IRAM is not set
# end of TWAI Configuration
# CONFIG_TWAI_SKIP_LEGACY_CONFLICT_CHECK is not set
# end of Legacy TWAI Driver Configurations
#
# Legacy ADC Driver Configuration
#
# CONFIG_ADC_SUPPRESS_DEPRECATE_WARN is not set
# CONFIG_ADC_SKIP_LEGACY_CONFLICT_CHECK is not set
#
# Legacy ADC Calibration Configuration
@@ -847,42 +979,55 @@ CONFIG_BT_ALARM_MAX_NUM=50
# Legacy MCPWM Driver Configurations
#
# CONFIG_MCPWM_SUPPRESS_DEPRECATE_WARN is not set
# CONFIG_MCPWM_SKIP_LEGACY_CONFLICT_CHECK is not set
# end of Legacy MCPWM Driver Configurations
#
# Legacy Timer Group Driver Configurations
#
# CONFIG_GPTIMER_SUPPRESS_DEPRECATE_WARN is not set
# CONFIG_GPTIMER_SKIP_LEGACY_CONFLICT_CHECK is not set
# end of Legacy Timer Group Driver Configurations
#
# Legacy RMT Driver Configurations
#
# CONFIG_RMT_SUPPRESS_DEPRECATE_WARN is not set
# CONFIG_RMT_SKIP_LEGACY_CONFLICT_CHECK is not set
# end of Legacy RMT Driver Configurations
#
# Legacy I2S Driver Configurations
#
# CONFIG_I2S_SUPPRESS_DEPRECATE_WARN is not set
# CONFIG_I2S_SKIP_LEGACY_CONFLICT_CHECK is not set
# end of Legacy I2S Driver Configurations
#
# Legacy I2C Driver Configurations
#
# CONFIG_I2C_SKIP_LEGACY_CONFLICT_CHECK is not set
# end of Legacy I2C Driver Configurations
#
# Legacy PCNT Driver Configurations
#
# CONFIG_PCNT_SUPPRESS_DEPRECATE_WARN is not set
# CONFIG_PCNT_SKIP_LEGACY_CONFLICT_CHECK is not set
# end of Legacy PCNT Driver Configurations
#
# Legacy SDM Driver Configurations
#
# CONFIG_SDM_SUPPRESS_DEPRECATE_WARN is not set
# CONFIG_SDM_SKIP_LEGACY_CONFLICT_CHECK is not set
# end of Legacy SDM Driver Configurations
#
# Legacy Temperature Sensor Driver Configurations
#
# CONFIG_TEMP_SENSOR_SUPPRESS_DEPRECATE_WARN is not set
# CONFIG_TEMP_SENSOR_SKIP_LEGACY_CONFLICT_CHECK is not set
# end of Legacy Temperature Sensor Driver Configurations
# end of Driver Configurations
@@ -898,6 +1043,7 @@ CONFIG_EFUSE_MAX_BLK_LEN=256
# ESP-TLS
#
CONFIG_ESP_TLS_USING_MBEDTLS=y
# CONFIG_ESP_TLS_USE_SECURE_ELEMENT is not set
CONFIG_ESP_TLS_USE_DS_PERIPHERAL=y
# CONFIG_ESP_TLS_CLIENT_SESSION_TICKETS is not set
# CONFIG_ESP_TLS_SERVER_SESSION_TICKETS is not set
@@ -905,6 +1051,7 @@ CONFIG_ESP_TLS_USE_DS_PERIPHERAL=y
# CONFIG_ESP_TLS_SERVER_MIN_AUTH_MODE_OPTIONAL is not set
# CONFIG_ESP_TLS_PSK_VERIFICATION is not set
# CONFIG_ESP_TLS_INSECURE is not set
CONFIG_ESP_TLS_DYN_BUF_STRATEGY_SUPPORTED=y
# end of ESP-TLS
#
@@ -932,8 +1079,10 @@ CONFIG_ESP_ERR_TO_NAME_LOOKUP=y
#
# ESP-Driver:Analog Comparator Configurations
#
# CONFIG_ANA_CMPR_ISR_IRAM_SAFE is not set
CONFIG_ANA_CMPR_ISR_HANDLER_IN_IRAM=y
# CONFIG_ANA_CMPR_CTRL_FUNC_IN_IRAM is not set
# CONFIG_ANA_CMPR_ISR_CACHE_SAFE is not set
CONFIG_ANA_CMPR_OBJ_CACHE_SAFE=y
# CONFIG_ANA_CMPR_ENABLE_DEBUG_LOG is not set
# end of ESP-Driver:Analog Comparator Configurations
@@ -948,7 +1097,8 @@ CONFIG_ESP_ERR_TO_NAME_LOOKUP=y
#
CONFIG_GPTIMER_ISR_HANDLER_IN_IRAM=y
# CONFIG_GPTIMER_CTRL_FUNC_IN_IRAM is not set
# CONFIG_GPTIMER_ISR_IRAM_SAFE is not set
# CONFIG_GPTIMER_ISR_CACHE_SAFE is not set
CONFIG_GPTIMER_OBJ_CACHE_SAFE=y
# CONFIG_GPTIMER_ENABLE_DEBUG_LOG is not set
# end of ESP-Driver:GPTimer Configurations
@@ -958,6 +1108,7 @@ CONFIG_GPTIMER_ISR_HANDLER_IN_IRAM=y
# CONFIG_I2C_ISR_IRAM_SAFE is not set
# CONFIG_I2C_ENABLE_DEBUG_LOG is not set
# CONFIG_I2C_ENABLE_SLAVE_DRIVER_VERSION_2 is not set
CONFIG_I2C_MASTER_ISR_HANDLER_IN_IRAM=y
# end of ESP-Driver:I2C Configurations
#
@@ -976,14 +1127,21 @@ CONFIG_GPTIMER_ISR_HANDLER_IN_IRAM=y
#
# ESP-Driver:MCPWM Configurations
#
# CONFIG_MCPWM_ISR_IRAM_SAFE is not set
CONFIG_MCPWM_ISR_HANDLER_IN_IRAM=y
# CONFIG_MCPWM_ISR_CACHE_SAFE is not set
# CONFIG_MCPWM_CTRL_FUNC_IN_IRAM is not set
CONFIG_MCPWM_OBJ_CACHE_SAFE=y
# CONFIG_MCPWM_ENABLE_DEBUG_LOG is not set
# end of ESP-Driver:MCPWM Configurations
#
# ESP-Driver:Parallel IO Configurations
#
CONFIG_PARLIO_TX_ISR_HANDLER_IN_IRAM=y
CONFIG_PARLIO_RX_ISR_HANDLER_IN_IRAM=y
# CONFIG_PARLIO_TX_ISR_CACHE_SAFE is not set
# CONFIG_PARLIO_RX_ISR_CACHE_SAFE is not set
CONFIG_PARLIO_OBJ_CACHE_SAFE=y
# CONFIG_PARLIO_ENABLE_DEBUG_LOG is not set
# CONFIG_PARLIO_ISR_IRAM_SAFE is not set
# end of ESP-Driver:Parallel IO Configurations
@@ -999,9 +1157,15 @@ CONFIG_GPTIMER_ISR_HANDLER_IN_IRAM=y
#
# ESP-Driver:RMT Configurations
#
# CONFIG_RMT_ISR_IRAM_SAFE is not set
CONFIG_RMT_ENCODER_FUNC_IN_IRAM=y
CONFIG_RMT_TX_ISR_HANDLER_IN_IRAM=y
CONFIG_RMT_RX_ISR_HANDLER_IN_IRAM=y
# CONFIG_RMT_RECV_FUNC_IN_IRAM is not set
# CONFIG_RMT_TX_ISR_CACHE_SAFE is not set
# CONFIG_RMT_RX_ISR_CACHE_SAFE is not set
CONFIG_RMT_OBJ_CACHE_SAFE=y
# CONFIG_RMT_ENABLE_DEBUG_LOG is not set
# CONFIG_RMT_ISR_IRAM_SAFE is not set
# end of ESP-Driver:RMT Configurations
#
@@ -1027,12 +1191,28 @@ CONFIG_SPI_SLAVE_ISR_IN_IRAM=y
# CONFIG_TEMP_SENSOR_ISR_IRAM_SAFE is not set
# end of ESP-Driver:Temperature Sensor Configurations
#
# ESP-Driver:TWAI Configurations
#
# CONFIG_TWAI_ISR_IN_IRAM is not set
# CONFIG_TWAI_ISR_CACHE_SAFE is not set
# CONFIG_TWAI_ENABLE_DEBUG_LOG is not set
# end of ESP-Driver:TWAI Configurations
#
# ESP-Driver:UART Configurations
#
# CONFIG_UART_ISR_IN_IRAM is not set
# end of ESP-Driver:UART Configurations
#
# ESP-Driver:UHCI Configurations
#
# CONFIG_UHCI_ISR_HANDLER_IN_IRAM is not set
# CONFIG_UHCI_ISR_CACHE_SAFE is not set
# CONFIG_UHCI_ENABLE_DEBUG_LOG is not set
# end of ESP-Driver:UHCI Configurations
#
# ESP-Driver:USB Serial/JTAG Configuration
#
@@ -1069,6 +1249,13 @@ CONFIG_ESP_GDBSTUB_SUPPORT_TASKS=y
CONFIG_ESP_GDBSTUB_MAX_TASKS=32
# end of GDB Stub
#
# ESP HID
#
CONFIG_ESPHID_TASK_SIZE_BT=2048
CONFIG_ESPHID_TASK_SIZE_BLE=4096
# end of ESP HID
#
# ESP HTTP client
#
@@ -1105,6 +1292,7 @@ CONFIG_ESP_HTTPS_OTA_EVENT_POST_TIMEOUT=2000
#
# CONFIG_ESP_HTTPS_SERVER_ENABLE is not set
CONFIG_ESP_HTTPS_SERVER_EVENT_POST_TIMEOUT=2000
# CONFIG_ESP_HTTPS_SERVER_CERT_SELECT_HOOK is not set
# end of ESP HTTPS server
#
@@ -1117,15 +1305,15 @@ CONFIG_ESP_HTTPS_SERVER_EVENT_POST_TIMEOUT=2000
CONFIG_ESP32H2_REV_MIN_0=y
# CONFIG_ESP32H2_REV_MIN_1 is not set
# CONFIG_ESP32H2_REV_MIN_2 is not set
# CONFIG_ESP32H2_REV_MIN_102 is not set
CONFIG_ESP32H2_REV_MIN_FULL=0
CONFIG_ESP_REV_MIN_FULL=0
#
# Maximum Supported ESP32-H2 Revision (Rev v0.99)
# Maximum Supported ESP32-H2 Revision (Rev v1.99)
#
CONFIG_ESP32H2_REV_MAX_FULL=99
CONFIG_ESP_REV_MAX_FULL=99
# CONFIG_ESP32H2_REV100_DEVELOPMENT is not set
CONFIG_ESP32H2_REV_MAX_FULL=199
CONFIG_ESP_REV_MAX_FULL=199
CONFIG_ESP_EFUSE_BLOCK_REV_MIN_FULL=0
CONFIG_ESP_EFUSE_BLOCK_REV_MAX_FULL=99
@@ -1150,6 +1338,8 @@ CONFIG_ESP32H2_UNIVERSAL_MAC_ADDRESSES=2
# Sleep Config
#
CONFIG_ESP_SLEEP_POWER_DOWN_FLASH=y
CONFIG_ESP_SLEEP_FLASH_LEAKAGE_WORKAROUND=y
# CONFIG_ESP_SLEEP_MSPI_NEED_ALL_IO_PU is not set
CONFIG_ESP_SLEEP_GPIO_RESET_WORKAROUND=y
CONFIG_ESP_SLEEP_WAIT_FLASH_READY_EXTRA_DELAY=0
# CONFIG_ESP_SLEEP_CACHE_SAFE_ASSERTION is not set
@@ -1170,7 +1360,8 @@ CONFIG_RTC_CLK_CAL_CYCLES=1024
#
# Peripheral Control
#
CONFIG_PERIPH_CTRL_FUNC_IN_IRAM=y
CONFIG_ESP_PERIPH_CTRL_FUNC_IN_IRAM=y
CONFIG_ESP_REGI2C_CTRL_FUNC_IN_IRAM=y
# end of Peripheral Control
#
@@ -1183,8 +1374,10 @@ CONFIG_PERIPH_CTRL_FUNC_IN_IRAM=y
# GDMA Configurations
#
CONFIG_GDMA_CTRL_FUNC_IN_IRAM=y
# CONFIG_GDMA_ISR_IRAM_SAFE is not set
CONFIG_GDMA_ISR_HANDLER_IN_IRAM=y
CONFIG_GDMA_OBJ_DRAM_SAFE=y
# CONFIG_GDMA_ENABLE_DEBUG_LOG is not set
# CONFIG_GDMA_ISR_IRAM_SAFE is not set
# end of GDMA Configurations
#
@@ -1194,8 +1387,37 @@ CONFIG_XTAL_FREQ_32=y
CONFIG_XTAL_FREQ=32
# end of Main XTAL Config
#
# Power Supplier
#
#
# Brownout Detector
#
CONFIG_ESP_BROWNOUT_DET=y
# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_7 is not set
# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_6 is not set
# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_5 is not set
# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_4 is not set
CONFIG_ESP_BROWNOUT_DET_LVL_SEL_3=y
# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_2 is not set
# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_1 is not set
# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_0 is not set
CONFIG_ESP_BROWNOUT_DET_LVL=3
CONFIG_ESP_BROWNOUT_USE_INTR=y
# end of Brownout Detector
#
# RTC Backup Battery
#
# CONFIG_ESP_VBAT_INIT_AUTO is not set
# CONFIG_ESP_VBAT_WAKEUP_CHIP_ON_VBAT_BROWNOUT is not set
# end of RTC Backup Battery
# end of Power Supplier
CONFIG_ESP_SPI_BUS_LOCK_ISR_FUNCS_IN_IRAM=y
CONFIG_ESP_SPI_BUS_LOCK_FUNCS_IN_IRAM=y
CONFIG_ESP_INTR_IN_IRAM=y
# end of Hardware Settings
#
@@ -1242,13 +1464,17 @@ CONFIG_ESP_PHY_RF_CAL_PARTIAL=y
# CONFIG_ESP_PHY_RF_CAL_NONE is not set
# CONFIG_ESP_PHY_RF_CAL_FULL is not set
CONFIG_ESP_PHY_CALIBRATION_MODE=0
CONFIG_ESP_PHY_PLL_TRACK_PERIOD_MS=1000
# CONFIG_ESP_PHY_PLL_TRACK_DEBUG is not set
# CONFIG_ESP_PHY_RECORD_USED_TIME is not set
CONFIG_ESP_PHY_IRAM_OPT=y
# CONFIG_ESP_PHY_DEBUG is not set
# end of PHY
#
# Power Management
#
CONFIG_PM_SLEEP_FUNC_IN_IRAM=y
CONFIG_PM_ENABLE=y
CONFIG_PM_DFS_INIT_AUTO=y
# CONFIG_PM_PROFILING is not set
@@ -1272,6 +1498,12 @@ CONFIG_PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP=y
# CONFIG_RINGBUF_PLACE_FUNCTIONS_INTO_FLASH is not set
# end of ESP Ringbuf
#
# ESP-ROM
#
CONFIG_ESP_ROM_PRINT_IN_IRAM=y
# end of ESP-ROM
#
# ESP Security Specific
#
@@ -1285,6 +1517,9 @@ CONFIG_ESP_CRYPTO_DPA_PROTECTION_LEVEL_LOW=y
# CONFIG_ESP_CRYPTO_DPA_PROTECTION_LEVEL_HIGH is not set
CONFIG_ESP_CRYPTO_DPA_PROTECTION_LEVEL=1
# end of Crypto DPA Protection
# CONFIG_ESP_CRYPTO_FORCE_ECC_CONSTANT_TIME_POINT_MUL is not set
# CONFIG_ESP_ECDSA_ENABLE_P192_CURVE is not set
# end of ESP Security Specific
#
@@ -1294,6 +1529,7 @@ CONFIG_ESP_CRYPTO_DPA_PROTECTION_LEVEL=1
# CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_64 is not set
CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_96=y
CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=96
CONFIG_ESP_SYSTEM_IN_IRAM=y
# CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT is not set
CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT=y
# CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT is not set
@@ -1304,7 +1540,9 @@ CONFIG_ESP_SYSTEM_RTC_EXT_XTAL=y
CONFIG_ESP_SYSTEM_RTC_EXT_XTAL_BOOTSTRAP_CYCLES=0
CONFIG_ESP_SYSTEM_RTC_FAST_MEM_AS_HEAP_DEPCHECK=y
CONFIG_ESP_SYSTEM_ALLOW_RTC_FAST_MEM_AS_HEAP=y
CONFIG_ESP_SYSTEM_NO_BACKTRACE=y
# CONFIG_ESP_SYSTEM_USE_EH_FRAME is not set
# CONFIG_ESP_SYSTEM_USE_FRAME_POINTER is not set
#
# Memory protection
@@ -1342,23 +1580,6 @@ CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0=y
# CONFIG_ESP_DEBUG_INCLUDE_OCD_STUB_BINS is not set
CONFIG_ESP_DEBUG_OCDAWARE=y
CONFIG_ESP_SYSTEM_CHECK_INT_LEVEL_4=y
#
# Brownout Detector
#
CONFIG_ESP_BROWNOUT_DET=y
# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_7 is not set
# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_6 is not set
# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_5 is not set
# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_4 is not set
CONFIG_ESP_BROWNOUT_DET_LVL_SEL_3=y
# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_2 is not set
# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_1 is not set
# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_0 is not set
CONFIG_ESP_BROWNOUT_DET_LVL=3
# end of Brownout Detector
CONFIG_ESP_SYSTEM_BROWNOUT_INTR=y
CONFIG_ESP_SYSTEM_HW_STACK_GUARD=y
CONFIG_ESP_SYSTEM_BBPLL_RECALIB=y
CONFIG_ESP_SYSTEM_HW_PC_RECORD=y
@@ -1373,6 +1594,7 @@ CONFIG_ESP_IPC_TASK_STACK_SIZE=1024
#
# ESP Timer (High Resolution Timer)
#
CONFIG_ESP_TIMER_IN_IRAM=y
# CONFIG_ESP_TIMER_PROFILING is not set
CONFIG_ESP_TIME_FUNCS_USE_RTC_TIMER=y
CONFIG_ESP_TIME_FUNCS_USE_ESP_TIMER=y
@@ -1437,6 +1659,14 @@ CONFIG_FATFS_VFS_FSTAT_BLKSIZE=0
# CONFIG_FATFS_IMMEDIATE_FSYNC is not set
# CONFIG_FATFS_USE_LABEL is not set
CONFIG_FATFS_LINK_LOCK=y
# CONFIG_FATFS_USE_DYN_BUFFERS is not set
#
# File system free space calculation behavior
#
CONFIG_FATFS_DONT_TRUST_FREE_CLUSTER_CNT=0
CONFIG_FATFS_DONT_TRUST_LAST_ALLOC=0
# end of File system free space calculation behavior
# end of FAT Filesystem support
#
@@ -1480,6 +1710,7 @@ CONFIG_FREERTOS_IDLE_TIME_BEFORE_SLEEP=3
#
# Port
#
CONFIG_FREERTOS_TASK_FUNCTION_WRAPPER=y
# CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK is not set
CONFIG_FREERTOS_TLSP_DELETION_CALLBACKS=y
# CONFIG_FREERTOS_TASK_PRE_DELETION_HOOK is not set
@@ -1507,6 +1738,7 @@ CONFIG_FREERTOS_DEBUG_OCDAWARE=y
CONFIG_FREERTOS_ENABLE_TASK_SNAPSHOT=y
CONFIG_FREERTOS_PLACE_SNAPSHOT_FUNS_INTO_FLASH=y
CONFIG_FREERTOS_NUMBER_OF_CORES=1
CONFIG_FREERTOS_IN_IRAM=y
# end of FreeRTOS
#
@@ -1519,8 +1751,6 @@ CONFIG_HAL_ASSERTION_EQUALS_SYSTEM=y
CONFIG_HAL_DEFAULT_ASSERTION_LEVEL=2
CONFIG_HAL_SYSTIMER_USE_ROM_IMPL=y
CONFIG_HAL_WDT_USE_ROM_IMPL=y
CONFIG_HAL_SPI_MASTER_FUNC_IN_IRAM=y
CONFIG_HAL_SPI_SLAVE_FUNC_IN_IRAM=y
# CONFIG_HAL_ECDSA_GEN_SIG_CM is not set
# end of Hardware Abstraction Layer (HAL) and Low Level (LL)
@@ -1537,6 +1767,7 @@ CONFIG_HEAP_TRACING_OFF=y
# CONFIG_HEAP_TASK_TRACKING is not set
# CONFIG_HEAP_ABORT_WHEN_ALLOCATION_FAILS is not set
CONFIG_HEAP_TLSF_USE_ROM_IMPL=y
# CONFIG_HEAP_PLACE_FUNCTION_INTO_FLASH is not set
# end of Heap memory debugging
#
@@ -1555,11 +1786,15 @@ CONFIG_IEEE802154_PENDING_TABLE_SIZE=20
# CONFIG_IEEE802154_TIMING_OPTIMIZATION is not set
# CONFIG_IEEE802154_SLEEP_ENABLE is not set
# CONFIG_IEEE802154_DEBUG is not set
# CONFIG_IEEE802154_DEBUG_ASSERT_MONITOR is not set
# end of IEEE 802.15.4
#
# Log
#
CONFIG_LOG_VERSION_1=y
# CONFIG_LOG_VERSION_2 is not set
CONFIG_LOG_VERSION=1
#
# Log Level
@@ -1597,6 +1832,15 @@ CONFIG_LOG_TAG_LEVEL_IMPL_CACHE_SIZE=31
CONFIG_LOG_TIMESTAMP_SOURCE_RTOS=y
# CONFIG_LOG_TIMESTAMP_SOURCE_SYSTEM is not set
# end of Format
#
# Settings
#
CONFIG_LOG_MODE_TEXT_EN=y
CONFIG_LOG_MODE_TEXT=y
# end of Settings
CONFIG_LOG_IN_IRAM=y
# end of Log
#
@@ -1604,7 +1848,6 @@ CONFIG_LOG_TIMESTAMP_SOURCE_RTOS=y
#
CONFIG_LWIP_ENABLE=y
CONFIG_LWIP_LOCAL_HOSTNAME="espressif"
# CONFIG_LWIP_NETIF_API is not set
CONFIG_LWIP_TCPIP_TASK_PRIO=18
# CONFIG_LWIP_TCPIP_CORE_LOCKING is not set
# CONFIG_LWIP_CHECK_THREAD_SAFETY is not set
@@ -1641,7 +1884,7 @@ CONFIG_LWIP_DHCP_DOES_ARP_CHECK=y
# CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set
CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y
# CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set
CONFIG_LWIP_DHCP_OPTIONS_LEN=68
CONFIG_LWIP_DHCP_OPTIONS_LEN=69
CONFIG_LWIP_NUM_NETIF_CLIENT_DATA=0
CONFIG_LWIP_DHCP_COARSE_TIMER_SECS=1
@@ -1749,6 +1992,7 @@ CONFIG_LWIP_DNS_MAX_HOST_IP=1
CONFIG_LWIP_DNS_MAX_SERVERS=3
# CONFIG_LWIP_FALLBACK_DNS_SERVER_SUPPORT is not set
# CONFIG_LWIP_DNS_SETSERVER_WITH_NETIF is not set
# CONFIG_LWIP_USE_ESP_GETADDRINFO is not set
# end of DNS
CONFIG_LWIP_BRIDGEIF_MAX_PORTS=7
@@ -1769,6 +2013,9 @@ CONFIG_LWIP_HOOK_ND6_GET_GW_NONE=y
CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_NONE=y
# CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_DEFAULT is not set
# CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_CUSTOM is not set
CONFIG_LWIP_HOOK_DHCP_EXTRA_OPTION_NONE=y
# CONFIG_LWIP_HOOK_DHCP_EXTRA_OPTION_DEFAULT is not set
# CONFIG_LWIP_HOOK_DHCP_EXTRA_OPTION_CUSTOM is not set
CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_NONE=y
# CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_DEFAULT is not set
# CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_CUSTOM is not set
@@ -1802,6 +2049,7 @@ CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN=4096
# CONFIG_MBEDTLS_X509_TRUSTED_CERT_CALLBACK is not set
# CONFIG_MBEDTLS_SSL_CONTEXT_SERIALIZATION is not set
CONFIG_MBEDTLS_SSL_KEEP_PEER_CERTIFICATE=y
# CONFIG_MBEDTLS_SSL_KEYING_MATERIAL_EXPORT is not set
CONFIG_MBEDTLS_PKCS7_C=y
# end of mbedTLS v3.x related
@@ -1822,6 +2070,7 @@ CONFIG_MBEDTLS_CMAC_C=y
CONFIG_MBEDTLS_HARDWARE_AES=y
CONFIG_MBEDTLS_AES_USE_INTERRUPT=y
CONFIG_MBEDTLS_AES_INTERRUPT_LEVEL=0
# CONFIG_MBEDTLS_AES_USE_PSEUDO_ROUND_FUNC is not set
CONFIG_MBEDTLS_GCM_SUPPORT_NON_AES_CIPHER=y
CONFIG_MBEDTLS_HARDWARE_MPI=y
CONFIG_MBEDTLS_LARGE_KEY_SOFTWARE_MPI=y
@@ -1839,6 +2088,7 @@ CONFIG_MBEDTLS_HAVE_TIME=y
# CONFIG_MBEDTLS_PLATFORM_TIME_ALT is not set
# CONFIG_MBEDTLS_HAVE_TIME_DATE is not set
CONFIG_MBEDTLS_ECDSA_DETERMINISTIC=y
CONFIG_MBEDTLS_SHA1_C=y
CONFIG_MBEDTLS_SHA512_C=y
# CONFIG_MBEDTLS_SHA3_C is not set
CONFIG_MBEDTLS_TLS_SERVER_AND_CLIENT=y
@@ -1920,6 +2170,7 @@ CONFIG_MBEDTLS_ECP_NIST_OPTIM=y
# CONFIG_MBEDTLS_THREADING_C is not set
CONFIG_MBEDTLS_ERROR_STRINGS=y
CONFIG_MBEDTLS_FS_IO=y
# CONFIG_MBEDTLS_ALLOW_WEAK_CERTIFICATE_VERIFICATION is not set
# end of mbedTLS
#
@@ -1939,20 +2190,24 @@ CONFIG_MQTT_TRANSPORT_WEBSOCKET_SECURE=y
# end of ESP-MQTT Configurations
#
# Newlib
# LibC
#
CONFIG_NEWLIB_STDOUT_LINE_ENDING_CRLF=y
# CONFIG_NEWLIB_STDOUT_LINE_ENDING_LF is not set
# CONFIG_NEWLIB_STDOUT_LINE_ENDING_CR is not set
# CONFIG_NEWLIB_STDIN_LINE_ENDING_CRLF is not set
# CONFIG_NEWLIB_STDIN_LINE_ENDING_LF is not set
CONFIG_NEWLIB_STDIN_LINE_ENDING_CR=y
# CONFIG_NEWLIB_NANO_FORMAT is not set
CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC_HRT=y
# CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC is not set
# CONFIG_NEWLIB_TIME_SYSCALL_USE_HRT is not set
# CONFIG_NEWLIB_TIME_SYSCALL_USE_NONE is not set
# end of Newlib
CONFIG_LIBC_NEWLIB=y
CONFIG_LIBC_MISC_IN_IRAM=y
CONFIG_LIBC_LOCKS_PLACE_IN_IRAM=y
CONFIG_LIBC_STDOUT_LINE_ENDING_CRLF=y
# CONFIG_LIBC_STDOUT_LINE_ENDING_LF is not set
# CONFIG_LIBC_STDOUT_LINE_ENDING_CR is not set
# CONFIG_LIBC_STDIN_LINE_ENDING_CRLF is not set
# CONFIG_LIBC_STDIN_LINE_ENDING_LF is not set
CONFIG_LIBC_STDIN_LINE_ENDING_CR=y
# CONFIG_LIBC_NEWLIB_NANO_FORMAT is not set
CONFIG_LIBC_TIME_SYSCALL_USE_RTC_HRT=y
# CONFIG_LIBC_TIME_SYSCALL_USE_RTC is not set
# CONFIG_LIBC_TIME_SYSCALL_USE_HRT is not set
# CONFIG_LIBC_TIME_SYSCALL_USE_NONE is not set
# CONFIG_LIBC_OPTIMIZED_MISALIGNED_ACCESS is not set
# end of LibC
#
# NVS
@@ -1980,6 +2235,7 @@ CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC_HRT=y
CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_0=y
CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_1=y
CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_2=y
CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_PATCH_VERSION=y
# end of Protocomm
#
@@ -2021,6 +2277,8 @@ CONFIG_SPI_FLASH_BROWNOUT_RESET=y
# CONFIG_SPI_FLASH_AUTO_SUSPEND is not set
CONFIG_SPI_FLASH_SUSPEND_TSUS_VAL_US=50
# CONFIG_SPI_FLASH_FORCE_ENABLE_XMC_C_SUSPEND is not set
# CONFIG_SPI_FLASH_FORCE_ENABLE_C6_H2_SUSPEND is not set
CONFIG_SPI_FLASH_PLACE_FUNCTIONS_IN_IRAM=y
# end of Optional and Experimental Features (READ DOCS FIRST)
# end of Main Flash configuration
@@ -2046,7 +2304,8 @@ CONFIG_SPI_FLASH_WRITE_CHUNK_SIZE=8192
#
# Auto-detect flash chips
#
CONFIG_SPI_FLASH_VENDOR_XMC_SUPPORTED=y
CONFIG_SPI_FLASH_VENDOR_XMC_SUPPORT_ENABLED=y
CONFIG_SPI_FLASH_VENDOR_GD_SUPPORT_ENABLED=y
# CONFIG_SPI_FLASH_SUPPORT_ISSI_CHIP is not set
# CONFIG_SPI_FLASH_SUPPORT_MXIC_CHIP is not set
# CONFIG_SPI_FLASH_SUPPORT_GD_CHIP is not set
@@ -2117,6 +2376,7 @@ CONFIG_UNITY_ENABLE_DOUBLE=y
CONFIG_UNITY_ENABLE_IDF_TEST_RUNNER=y
# CONFIG_UNITY_ENABLE_FIXTURE is not set
# CONFIG_UNITY_ENABLE_BACKTRACE_ON_FAIL is not set
# CONFIG_UNITY_TEST_ORDER_BY_FILE_PATH_AND_LINE is not set
# end of Unity unit testing library
#