mirror of
https://github.com/meshtastic/firmware.git
synced 2026-05-31 12:18:18 -04:00
* preliminary io pin definitions * Update product link * Move to new variant structure and refactor inkHUD - Display does not work and SX1262 init fails on HT752-02 * update variant definitions * add EPD driver * fix lora, add v1/v2 variant targets * adapt pins for v1/v2 * alt button * add compile guards * use lilygo epd47 lib * workaround for INT ERR_NOT_FOUND * USE_EPD (e-ink parallel display) * use FastEPD driver * create screen * EInkParallelDisplay definition * setup screen * dispaly() implementation * enable touchscreen * rotate touch screen * refactor display buffer processing * provide local copy of TwoWire instance as the touch driver calls end() * use larger fonts * replace touch driver; enable debugging * replace touch driver; enable debugging * consider bitsremain == 0 * tryfix crash * fix button * update touch driver * set lora_cs pin * update touch driver and lib reference * add locks * limit Ghosting similar to EInkDynamicDisplay * workaround for FastEPD partial update bug (artifacts) * display() code cleanup * fix a few platformio definitions * more EPD display cleanup * set rotation * use FastEPD arduino I2C by default * touch rotation * update screen for EPD * increase swipe distance for larger screen * EPD UIRenderer * trunk fmt * further #ifdef USE_EPD * disable rotation which messes up w/h; more cleanup * switch off ghosting algo * releease build; V1 buttons * swap V1 buttons * rearrange USE_EINK/EPD macros, use large font * cleanup (revert modified files) * more cleanup * revert * revert file * revert file Removed redundant line continuation in preprocessor directives. * Temporary gate off PSRam calculations until we can fix them * move variant.cpp and update commit references * revert wrong merge * add earlyInitVariant() * initialize all port 0 pins (0-7) as outputs / HIGH --------- Co-authored-by: Thomas Göttgens <tgoettgens@gmail.com> Co-authored-by: Jason P <applewiz@mac.com> Co-authored-by: Jonathan Bennett <jbennett@incomsystems.biz> Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
70 lines
1.8 KiB
C++
70 lines
1.8 KiB
C++
#pragma once
|
|
|
|
#include "configuration.h"
|
|
|
|
#ifdef USE_EINK_PARALLELDISPLAY
|
|
#include <OLEDDisplay.h>
|
|
|
|
#include <atomic>
|
|
#include <freertos/FreeRTOS.h>
|
|
#include <freertos/task.h>
|
|
|
|
class FASTEPD;
|
|
|
|
/**
|
|
* Adapter for E-Ink 8-bit parallel displays (EPD), specifically devices supported by FastEPD library
|
|
*/
|
|
class EInkParallelDisplay : public OLEDDisplay
|
|
{
|
|
public:
|
|
enum EpdRotation {
|
|
EPD_ROT_LANDSCAPE = 0,
|
|
EPD_ROT_PORTRAIT = 90,
|
|
EPD_ROT_INVERTED_LANDSCAPE = 180,
|
|
EPD_ROT_INVERTED_PORTRAIT = 270,
|
|
};
|
|
|
|
EInkParallelDisplay(uint16_t width, uint16_t height, EpdRotation rotation);
|
|
virtual ~EInkParallelDisplay();
|
|
|
|
// OLEDDisplay virtuals
|
|
bool connect() override;
|
|
void sendCommand(uint8_t com) override;
|
|
int getBufferOffset(void) override { return 0; }
|
|
|
|
void display(void) override;
|
|
bool forceDisplay(uint32_t msecLimit = 1000);
|
|
void endUpdate();
|
|
|
|
protected:
|
|
uint32_t lastDrawMsec = 0;
|
|
FASTEPD *epaper;
|
|
|
|
private:
|
|
// Async full-refresh support
|
|
std::atomic<bool> asyncFullRunning{false};
|
|
TaskHandle_t asyncTaskHandle = nullptr;
|
|
void startAsyncFullUpdate(int clearMode);
|
|
static void asyncFullUpdateTask(void *pvParameters);
|
|
|
|
#ifdef EINK_LIMIT_GHOSTING_PX
|
|
// helpers
|
|
void resetGhostPixelTracking();
|
|
void markDirtyBits(const uint8_t *prevBuf, uint32_t pos, uint8_t mask, uint8_t out);
|
|
void countGhostPixelsAndMaybePromote(int &newTop, int &newBottom, bool &forceFull);
|
|
|
|
// per-bit dirty buffer (same format as epaper buffers): one bit == one pixel
|
|
uint8_t *dirtyPixels = nullptr;
|
|
size_t dirtyPixelsSize = 0;
|
|
uint32_t ghostPixelCount = 0;
|
|
uint32_t ghostPixelLimit = EINK_LIMIT_GHOSTING_PX;
|
|
#endif
|
|
|
|
EpdRotation rotation;
|
|
uint32_t previousImageHash = 0;
|
|
uint32_t lastUpdateMs = 0;
|
|
int fastRefreshCount = 0;
|
|
};
|
|
|
|
#endif
|