Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| fc1367fc55 | |||
| 28b6a353aa | |||
| d900083398 | |||
| e2c9d8f1e4 |
@@ -9,9 +9,11 @@
|
|||||||
// The test build adds test/mocks to the include path via -iquote.
|
// The test build adds test/mocks to the include path via -iquote.
|
||||||
#include "epd_mock.h"
|
#include "epd_mock.h"
|
||||||
#include "esp_sleep.h"
|
#include "esp_sleep.h"
|
||||||
|
#include "driver/gpio.h"
|
||||||
#else
|
#else
|
||||||
#include "epd.h"
|
#include "epd.h"
|
||||||
#include <esp_sleep.h>
|
#include <esp_sleep.h>
|
||||||
|
#include <driver/gpio.h>
|
||||||
#include <mbedtls/sha256.h>
|
#include <mbedtls/sha256.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -354,6 +356,12 @@ void normal_operation_impl(const String& mac, HTTP& http, const String& url, Pre
|
|||||||
// false → normal_operation_impl runs → the next poll fetches a fresh
|
// false → normal_operation_impl runs → the next poll fetches a fresh
|
||||||
// image, which doubles as a "force refresh" gesture.
|
// image, which doubles as a "force refresh" gesture.
|
||||||
esp_sleep_enable_ext0_wakeup((gpio_num_t)PIN_BTN_RESET, 0);
|
esp_sleep_enable_ext0_wakeup((gpio_num_t)PIN_BTN_RESET, 0);
|
||||||
|
// Latch any gpio_hold_en pins through the deep sleep period.
|
||||||
|
// epd_sleep() cuts PIN_PWR LOW + holds it; without this call the
|
||||||
|
// hold releases on the RTC transition and the panel rail comes back
|
||||||
|
// up, losing the saving. Released per-pin in epd_setup_pins() on
|
||||||
|
// wake via gpio_hold_dis().
|
||||||
|
gpio_deep_sleep_hold_en();
|
||||||
esp_deep_sleep_start();
|
esp_deep_sleep_start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,7 @@
|
|||||||
#include <qrcode.h>
|
#include <qrcode.h>
|
||||||
#include <esp_task_wdt.h>
|
#include <esp_task_wdt.h>
|
||||||
#include <esp_heap_caps.h>
|
#include <esp_heap_caps.h>
|
||||||
|
#include <driver/gpio.h>
|
||||||
|
|
||||||
static constexpr uint16_t W = 1200;
|
static constexpr uint16_t W = 1200;
|
||||||
static constexpr uint16_t H = 1600;
|
static constexpr uint16_t H = 1600;
|
||||||
@@ -103,6 +104,12 @@ static void panel_reset() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void epd_setup_pins() {
|
void epd_setup_pins() {
|
||||||
|
// Release the PIN_PWR hold latched from the previous deep sleep so we
|
||||||
|
// can drive it again. No-op on cold boot (nothing was held). Paired
|
||||||
|
// with gpio_hold_en() in epd_sleep() and gpio_deep_sleep_hold_en() in
|
||||||
|
// operation.h.
|
||||||
|
gpio_hold_dis((gpio_num_t)PIN_PWR);
|
||||||
|
|
||||||
pinMode(PIN_PWR, OUTPUT);
|
pinMode(PIN_PWR, OUTPUT);
|
||||||
pinMode(PIN_RST, OUTPUT);
|
pinMode(PIN_RST, OUTPUT);
|
||||||
pinMode(PIN_DC, OUTPUT);
|
pinMode(PIN_DC, OUTPUT);
|
||||||
@@ -191,6 +198,16 @@ void epd_sleep() {
|
|||||||
SPI.transfer(0xA5); // sentinel
|
SPI.transfer(0xA5); // sentinel
|
||||||
cs_both(HIGH);
|
cs_both(HIGH);
|
||||||
s_initialized = false;
|
s_initialized = false;
|
||||||
|
|
||||||
|
// Cut the panel power rail. The Waveshare board exposes PIN_PWR
|
||||||
|
// specifically for battery operation — the e-ink image persists
|
||||||
|
// without VDD (particles are bistable), and dropping the rail kills
|
||||||
|
// the boost converter's quiescent draw (~50–500 µA depending on the
|
||||||
|
// load on the rail). Latch LOW so it survives deep sleep; paired with
|
||||||
|
// gpio_deep_sleep_hold_en() in operation.h just before the chip
|
||||||
|
// enters sleep.
|
||||||
|
digitalWrite(PIN_PWR, LOW);
|
||||||
|
gpio_hold_en((gpio_num_t)PIN_PWR);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ── Draw helpers ───────────────────────────────────────────────────────────────
|
// ── Draw helpers ───────────────────────────────────────────────────────────────
|
||||||
|
|||||||
@@ -3,4 +3,4 @@
|
|||||||
// Panel-specific firmware version for the Waveshare 13.3" Spectra-6 driver.
|
// Panel-specific firmware version for the Waveshare 13.3" Spectra-6 driver.
|
||||||
// Bump on each driver change worth correlating with server-side reports.
|
// Bump on each driver change worth correlating with server-side reports.
|
||||||
// Independent of the shared firmware version (HTTP / NVS / sleep / etc.).
|
// Independent of the shared firmware version (HTTP / NVS / sleep / etc.).
|
||||||
#define PANEL_FW_VERSION "v1.0"
|
#define PANEL_FW_VERSION "v1.0.1"
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
#pragma once
|
||||||
|
// Native-test stubs for gpio_hold_* — operation.h calls
|
||||||
|
// gpio_deep_sleep_hold_en() before esp_deep_sleep_start() to latch
|
||||||
|
// PIN_PWR LOW through deep sleep. epd_driver.cpp (not built natively)
|
||||||
|
// also uses gpio_hold_en / gpio_hold_dis. Stubs let tests link.
|
||||||
|
#include "esp_sleep.h" // for gpio_num_t
|
||||||
|
|
||||||
|
inline void gpio_hold_en(gpio_num_t) {}
|
||||||
|
inline void gpio_hold_dis(gpio_num_t) {}
|
||||||
|
inline void gpio_deep_sleep_hold_en() {}
|
||||||
|
inline void gpio_deep_sleep_hold_dis() {}
|
||||||
Reference in New Issue
Block a user