Public Access
Driver (components/el512/el512_panel.*, ESP-IDF only): - DMA ring of 8 x 4 lines (17 KB) refilled from the I2S EOF interrupt (IRAM) instead of a 142 KB full-frame stream; ~107 KB heap freed. - 256-entry lookup table encodes 8 pixels per step. - Back buffer + displayed buffer, swapped at the start of a frame. - PlatformIO builds it via lib_extra_dirs (EL512Core); lib/EL512 keeps the Adafruit GFX front end. ESPHome external component (platform: el512): - DisplayBuffer with optional ENABLE / _LOWPWR pins, set_enabled(), set_low_power(), helper functions for page lambdas. - still_alive_page: plays the Portal end-credits show, then returns to the previous page. Still Alive engine moved to components/el512/still_alive.* with a built-in 5x7 font (from Adafruit GFX, BSD); the PlatformIO demo uses the same code. The importer writes components/el512/still_alive_data.h and stops at 200 s (--until-ms), matching the hand-trimmed data. esphome/el512-panel.yaml: 8 pages (clock, forecast, agenda, dashboard, now playing, Plex, solar, Still Alive), page select, rotation, display and low-power switches, message text. home_assistant/packages/el512_panel.yaml: helper template sensors for forecast, agenda, now playing and Plex streams. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
135 lines
5.5 KiB
C
135 lines
5.5 KiB
C
// Classic 5x7 console font (printable ASCII 32..126), drawn in a 6x8 cell.
|
|
// Column-major, 5 bytes per character, bit 0 = top row.
|
|
//
|
|
// Taken from glcdfont.c of the Adafruit GFX Library
|
|
// (https://github.com/adafruit/Adafruit-GFX-Library), license below.
|
|
//
|
|
// Software License Agreement (BSD License)
|
|
//
|
|
// Copyright (c) 2012 Adafruit Industries. All rights reserved.
|
|
//
|
|
// Redistribution and use in source and binary forms, with or without
|
|
// modification, are permitted provided that the following conditions are met:
|
|
//
|
|
// - Redistributions of source code must retain the above copyright notice,
|
|
// this list of conditions and the following disclaimer.
|
|
// - Redistributions in binary form must reproduce the above copyright notice,
|
|
// this list of conditions and the following disclaimer in the documentation
|
|
// and/or other materials provided with the distribution.
|
|
//
|
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
|
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
// POSSIBILITY OF SUCH DAMAGE.
|
|
#pragma once
|
|
|
|
#include <stdint.h>
|
|
|
|
static constexpr char EL512_FONT_FIRST = 32;
|
|
static constexpr char EL512_FONT_LAST = 126;
|
|
|
|
static const uint8_t EL512_FONT[] = {
|
|
0x00, 0x00, 0x00, 0x00, 0x00, // space
|
|
0x00, 0x00, 0x5F, 0x00, 0x00, // !
|
|
0x00, 0x07, 0x00, 0x07, 0x00, // "
|
|
0x14, 0x7F, 0x14, 0x7F, 0x14, // #
|
|
0x24, 0x2A, 0x7F, 0x2A, 0x12, // $
|
|
0x23, 0x13, 0x08, 0x64, 0x62, // %
|
|
0x36, 0x49, 0x56, 0x20, 0x50, // &
|
|
0x00, 0x08, 0x07, 0x03, 0x00, // '
|
|
0x00, 0x1C, 0x22, 0x41, 0x00, // (
|
|
0x00, 0x41, 0x22, 0x1C, 0x00, // )
|
|
0x2A, 0x1C, 0x7F, 0x1C, 0x2A, // *
|
|
0x08, 0x08, 0x3E, 0x08, 0x08, // +
|
|
0x00, 0x80, 0x70, 0x30, 0x00, // ,
|
|
0x08, 0x08, 0x08, 0x08, 0x08, // -
|
|
0x00, 0x00, 0x60, 0x60, 0x00, // .
|
|
0x20, 0x10, 0x08, 0x04, 0x02, // /
|
|
0x3E, 0x51, 0x49, 0x45, 0x3E, // 0
|
|
0x00, 0x42, 0x7F, 0x40, 0x00, // 1
|
|
0x72, 0x49, 0x49, 0x49, 0x46, // 2
|
|
0x21, 0x41, 0x49, 0x4D, 0x33, // 3
|
|
0x18, 0x14, 0x12, 0x7F, 0x10, // 4
|
|
0x27, 0x45, 0x45, 0x45, 0x39, // 5
|
|
0x3C, 0x4A, 0x49, 0x49, 0x31, // 6
|
|
0x41, 0x21, 0x11, 0x09, 0x07, // 7
|
|
0x36, 0x49, 0x49, 0x49, 0x36, // 8
|
|
0x46, 0x49, 0x49, 0x29, 0x1E, // 9
|
|
0x00, 0x00, 0x14, 0x00, 0x00, // :
|
|
0x00, 0x40, 0x34, 0x00, 0x00, // ;
|
|
0x00, 0x08, 0x14, 0x22, 0x41, // <
|
|
0x14, 0x14, 0x14, 0x14, 0x14, // =
|
|
0x00, 0x41, 0x22, 0x14, 0x08, // >
|
|
0x02, 0x01, 0x59, 0x09, 0x06, // ?
|
|
0x3E, 0x41, 0x5D, 0x59, 0x4E, // @
|
|
0x7C, 0x12, 0x11, 0x12, 0x7C, // A
|
|
0x7F, 0x49, 0x49, 0x49, 0x36, // B
|
|
0x3E, 0x41, 0x41, 0x41, 0x22, // C
|
|
0x7F, 0x41, 0x41, 0x41, 0x3E, // D
|
|
0x7F, 0x49, 0x49, 0x49, 0x41, // E
|
|
0x7F, 0x09, 0x09, 0x09, 0x01, // F
|
|
0x3E, 0x41, 0x41, 0x51, 0x73, // G
|
|
0x7F, 0x08, 0x08, 0x08, 0x7F, // H
|
|
0x00, 0x41, 0x7F, 0x41, 0x00, // I
|
|
0x20, 0x40, 0x41, 0x3F, 0x01, // J
|
|
0x7F, 0x08, 0x14, 0x22, 0x41, // K
|
|
0x7F, 0x40, 0x40, 0x40, 0x40, // L
|
|
0x7F, 0x02, 0x1C, 0x02, 0x7F, // M
|
|
0x7F, 0x04, 0x08, 0x10, 0x7F, // N
|
|
0x3E, 0x41, 0x41, 0x41, 0x3E, // O
|
|
0x7F, 0x09, 0x09, 0x09, 0x06, // P
|
|
0x3E, 0x41, 0x51, 0x21, 0x5E, // Q
|
|
0x7F, 0x09, 0x19, 0x29, 0x46, // R
|
|
0x26, 0x49, 0x49, 0x49, 0x32, // S
|
|
0x03, 0x01, 0x7F, 0x01, 0x03, // T
|
|
0x3F, 0x40, 0x40, 0x40, 0x3F, // U
|
|
0x1F, 0x20, 0x40, 0x20, 0x1F, // V
|
|
0x3F, 0x40, 0x38, 0x40, 0x3F, // W
|
|
0x63, 0x14, 0x08, 0x14, 0x63, // X
|
|
0x03, 0x04, 0x78, 0x04, 0x03, // Y
|
|
0x61, 0x59, 0x49, 0x4D, 0x43, // Z
|
|
0x00, 0x7F, 0x41, 0x41, 0x41, // [
|
|
0x02, 0x04, 0x08, 0x10, 0x20, // backslash
|
|
0x00, 0x41, 0x41, 0x41, 0x7F, // ]
|
|
0x04, 0x02, 0x01, 0x02, 0x04, // ^
|
|
0x40, 0x40, 0x40, 0x40, 0x40, // _
|
|
0x00, 0x03, 0x07, 0x08, 0x00, // `
|
|
0x20, 0x54, 0x54, 0x78, 0x40, // a
|
|
0x7F, 0x28, 0x44, 0x44, 0x38, // b
|
|
0x38, 0x44, 0x44, 0x44, 0x28, // c
|
|
0x38, 0x44, 0x44, 0x28, 0x7F, // d
|
|
0x38, 0x54, 0x54, 0x54, 0x18, // e
|
|
0x00, 0x08, 0x7E, 0x09, 0x02, // f
|
|
0x18, 0xA4, 0xA4, 0x9C, 0x78, // g
|
|
0x7F, 0x08, 0x04, 0x04, 0x78, // h
|
|
0x00, 0x44, 0x7D, 0x40, 0x00, // i
|
|
0x20, 0x40, 0x40, 0x3D, 0x00, // j
|
|
0x7F, 0x10, 0x28, 0x44, 0x00, // k
|
|
0x00, 0x41, 0x7F, 0x40, 0x00, // l
|
|
0x7C, 0x04, 0x78, 0x04, 0x78, // m
|
|
0x7C, 0x08, 0x04, 0x04, 0x78, // n
|
|
0x38, 0x44, 0x44, 0x44, 0x38, // o
|
|
0xFC, 0x18, 0x24, 0x24, 0x18, // p
|
|
0x18, 0x24, 0x24, 0x18, 0xFC, // q
|
|
0x7C, 0x08, 0x04, 0x04, 0x08, // r
|
|
0x48, 0x54, 0x54, 0x54, 0x24, // s
|
|
0x04, 0x04, 0x3F, 0x44, 0x24, // t
|
|
0x3C, 0x40, 0x40, 0x20, 0x7C, // u
|
|
0x1C, 0x20, 0x40, 0x20, 0x1C, // v
|
|
0x3C, 0x40, 0x30, 0x40, 0x3C, // w
|
|
0x44, 0x28, 0x10, 0x28, 0x44, // x
|
|
0x4C, 0x90, 0x90, 0x90, 0x7C, // y
|
|
0x44, 0x64, 0x54, 0x4C, 0x44, // z
|
|
0x00, 0x08, 0x36, 0x41, 0x00, // {
|
|
0x00, 0x00, 0x77, 0x00, 0x00, // |
|
|
0x00, 0x41, 0x36, 0x08, 0x00, // }
|
|
0x02, 0x01, 0x02, 0x04, 0x02, // ~
|
|
};
|