Открытая операционная система для электронной книги Xteink X4 Pro
Монохромный интерфейс 800×480, сноски внизу страницы, аппаратная интеграция ESP32-S3 и аналитика чтения.
BookPoint — открытая микропрограмма для электронной книги Xteink X4 Pro (ESP32-S3, 16 МБ Flash, 8 МБ Octal PSRAM, дисплей E-Ink 800×480).
Прошивка содержит графический монохромный интерфейс, оптимизированный под контроллеры SSD1677 / UC8279, емкостный сенсор Goodix GT911 и аппаратные кнопки управления. Архитектура ориентирована на высокую скорость отрисовки страниц, надежность сохранения состояния и максимальную энергоэффективность.
Ниже приведено техническое сопоставление функциональных возможностей и архитектурных решений BookPoint OS и базовой микропрограммы CrossPoint для аппаратной платформы Xteink X4 Pro.
| Подсистема / Функция | BookPoint OS | CrossPoint Reader |
|---|---|---|
| Аварийное восстановление (Escape Hatch) | Аппаратный загрузочный перехватчик RecoveryBoot по удержанию кнопки Right (GPIO7) при старте; программный переход в Escape Hatch из меню системных настроек. Защита от потери работоспособности на устройствах с аппаратной блокировкой USB. |
Отсутствует аппаратная детекция аварийного загрузчика на ESP32-S3; нет программного входа в Escape Hatch из настроек. |
| Отказоустойчивость OTA-обновлений | Прямое безопасное переключение указателя otadata в обход проверки esp_ota_set_boot_partition (устранение Issue #1918 при работе с модифицированными образами). |
Стандартный механизм ESP-IDF OTA; возможен отказ при верификации контрольных сумм и конфигурации efuse. |
| Режим USB-накопителя (USB Flash Drive) | Встроенный USB Mass Storage (MSC) на базе аппаратного контроллера SDMMC. Прямое монтирование карты microSD в операционной системе ПК без настройки Wi-Fi. Безопасный возврат с USB-OTG на Serial/JTAG. | Передача файлов возможна только по беспроводной сети через встроенный HTTP-сервер либо путем физического извлечения карты памяти. |
| Сноски на текущей странице | Автоматическое извлечение текста сносок и отрисовка в нижней части страницы под разделительной чертой без потери текущего контекста чтения (поддержка внутренних ссылок id/name, внешних файлов сносок и форматов ЛитРес/royallib). |
Переход по гиперссылке в конец книги или в отдельный раздел с необходимостью возврата назад. |
| Навигация при чтении (Quick Return Jump) | Фиксация точки исхода при переходах по ссылкам, сноскам, оглавлению или прогрессу чтения; возврат к позиции чтения в одно касание кнопкой «<*». | Однонаправленный переход без сохранения предыдущей координаты в буфере навигации. |
| Управление подсветкой (Dual CCT Frontlight) | 10-битное логарифмическое перцептивное управление ШИМ с минимальным аппаратным порогом 2 LSB (0.195%). Подсветка сохраняет устойчивое свечение на минимальной яркости (1%) при любом цветовом балансе. | Линейная 8-битная шкала регулировки; отключение светодиодов на минимальных значениях яркости при смешивании каналов. |
| Аппаратная адаптация дисплеев | Изолированная инициализация софт-старта DC-DC преобразователя (команда 0x0C) только для SSD1677, исключающая акустический писк дросселей и нестабильность шины питания на контроллерах UC8279. |
Единый профиль инициализации панели; возможен высокочастотный акустический шум катушек индуктивности на экранах ревизии UC8279. |
| Сенсорный ввод (GT911) | Физические хит-боксы элементов управления увеличены до ≥56 px; выбор 3- и 9-зонной сетки тапов с настраиваемой центральной зоной меню; аппаратная фильтрация дребезга и защита I2C через ScopedI2CBusLock. |
Базовые размеры интерактивных зон (44 px), фиксированная трехзонная раскладка экрана чтения. |
| Аналитика чтения | Непрерывный учет сессий в StatsStore с фильтрацией периодов простоя, подсчетом темпа чтения и экспортом детального журнала в reading_stats.csv. |
Базовый счетчик общего времени чтения без фильтрации пауз и без экспорта журнала на карту памяти. |
| Энергосбережение в простое | Аппаратный вход в Light Sleep короткими интервалами при ожидании пользовательского ввода с сохранением тактирования подсветки из генератора RC_FAST (FREEINK_FRONTLIGHT_LS). |
Стандартный цикл ожидания без микро-сна процессора между событиями ввода. |
- Монохромная компоновка 800×480: однопиксельные разделители, специализированные E-Ink гарнитуры, отсутствие градационного шума и паразитных контуров.
- Строка состояния: отображение системного времени аппаратного RTC, даты, уровня заряда аккумулятора (в процентах и графически), статуса Wi-Fi и уровня подсветки.
- Панель быстрых настроек: вызов свайпом от верхнего края экрана; независимые регуляторы яркости холодного и теплого каналов подсветки, переключатели Wi-Fi, темной темы, ориентации экрана и спящего режима.
- Виджет текущего чтения: карточка последней открытой книги с отображением обложки, названия, автора, процентного прогресса, расчетного времени чтения и счетчика непрерывных дней активности.
- Список недавних книг: горизонтальная лента обложек для перехода к чтению в одно касание.
- Панель навигации: разделы «Библиотека», «Поиск», «Статистика», «Приложения» и «Настройки» с векторными пиктограммами 32×32.
- Гибридное управление: поддержка жестов емкостного сенсора Goodix GT911 с калиброванными зонами касания (≥56 px) и физических аппаратных клавиш.
- Наэкранное меню чтения: вызов оверлеев касанием центральной зоны экрана. Нижняя панель содержит ползунок навигации по страницам, процент прогресса и оценку времени до конца главы.
- Быстрый возврат к чтению: фиксация исходной позиции при переходах по ссылкам, сноскам, оглавлению или шкале прогресса; кнопка «<*» возвращает к месту чтения в одно касание.
- Настройка типографики: выбор размера шрифта, гарнитуры (включая JetBrains Mono, Roboto Condensed, OpenDyslexic), межстрочного интервала и полей страницы с динамической переверсткой текста в реальном времени.
- Потоковый декодер изображений: аппаратное декодирование книжных иллюстраций высокого разрешения через внешнюю память PSRAM.
- Сноски внизу страницы: автоматическое извлечение текста примечаний и отображение под разделителем текущей страницы без перехода в конец файла. Поддерживаются внутренние якоря (атрибуты
id,xml:id,name) и ссылки на внешние файлы книги. - Форматы файлов: EPUB 2/3, TXT, XTC, XTCH. Поддержка таблиц стилей CSS, алгоритмов расстановки переносов и RTL-текста.
- Автоматическое определение кодировок TXT: частотный статистический анализатор
TxtEncodingопределяет кодировки Windows-1251, KOI8-R и CP866 с автоматическим преобразованием потока в UTF-8. - Экранная клавиатура: русская (ЙЦУКЕН) и английская (QWERTY) раскладки; английская раскладка активируется по умолчанию для полей ввода сетевых паролей и адресов.
- Конфигурируемые зоны касания: выбор трехзонной или девятизонной схемы тапов для перелистывания страниц и вызова меню.
- Монохромные заставки 800×480 и 480×800: встроенный каталог изображений для книжной и альбомной ориентации.
- Режимы отображения: случайная ротация изображений из каталога, фиксированная заставка, обложка читаемой книги, а также системный экран с информацией о заряде аккумулятора и версии микропрограммы.
- Аппаратные часы реального времени (RTC BM8563): контроллер Belling BM8563 (I2C-адрес
0x51, PCF8563-совместимый) на шинеWire(SDA 39, SCL 38). Аппаратная инициализация системного времениsettimeofday()при запуске, контроль флага потери питания (VL bit). - Контроллер аккумулятора (CW2017): непрерывный опрос напряжения ячейки; автоматический перевод устройства в режим глубокого сна при падении напряжения ниже 3400 мВ для защиты аккумулятора от глубокого разряда.
- Потокобезопасная синхронизация I2C (ScopedI2CBusLock): рекурсивный мьютекс FreeRTOS изолирует шину I2C при одновременном обращении к сенсору GT911 (
0x5D), контроллеру питания CW2017 (0x63) и часам BM8563 (0x51). Реализована процедура аппаратного сброса шины (9 импульсов SCL) при залипании линии SDA. - Фреймбуферы и кэш в PSRAM: графические буферы 800×480 и буферы страниц книги размещаются в 8 МБ внешней памяти Octal PSRAM с контролем распределения памяти (
std::nothrow). - 10-битная перцептивная подсветка Dual CCT: раздельное ШИМ-управление холодным (GPIO8) и теплым (GPIO9) каналами по логарифмической кривой с аппаратным порогом 2 LSB (0.195%), удерживающим минимальное свечение в темноте. Обесточивание контроллера подсветки в спящем режиме.
- Аппаратная изоляция питания дисплея: команда инициализации софт-старта DC-DC преобразователя (0x0C) выполняется строго на контроллере SSD1677, предотвращая нестабильность преобразователя и акустический шум катушек питания на экранах с контроллером UltraChip UC8279.
- Энергосбережение: переход процессора в режим Light Sleep в интервалах ожидания ввода, автоматическое отключение Wi-Fi через 3 минуты неактивности.
- Журнал чтения (StatsStore): пошаговая фиксация времени сессий с фильтрацией простоя, вычисление темпа чтения и атомарный экспорт журнала в файл
reading_stats.csvна карту microSD.
| Подсистема / Компонент | Спецификация | Назначение в BookPoint |
|---|---|---|
| SoC / Процессор | ESP32-S3 (Dual-Core Xtensa LX7 @ 240 МГц) | Рендеринг страниц, обработка шрифтов, системная логика |
| Память | 16 МБ Flash + 8 МБ Octal PSRAM | Фреймбуферы 800×480, буферы верстки EPUB и кэш страниц |
| Дисплей | 3.97" E-Ink 800×480 (SSD1677 / UC8279, 240 PPI) | Аппаратный 4-градационный рендеринг, быстрые волновые формы DU |
| Сенсорный экран | Емкостный контроллер Goodix GT911 | Обработка жестов, панель быстрых настроек, экранная клавиатура |
| Аппаратные часы (RTC) | Belling BM8563 (I2C 0x51, PCF8563-совместимый) |
Автономный отсчет времени при выключенном питании |
| Контроллер аккумулятора | CellWise CW2017 (I2C 0x63) |
Высокоточный мониторинг заряда и защита от разряда (<3.4V) |
| Подсветка | Двухканальная CCT (Холодный GPIO8 / Теплый GPIO9) | Логарифмическая 10-битная регулировка яркости и цветового тона |
| Хранилище | MicroSD слот (SDMMC 1-bit / SPI) | Локальная библиотека книг, шрифты, словари, кэш обложек |
Актуальный бинарный образ микропрограммы: BookPoint_2.2.4_x4pro.bin (раздел Releases).
- Через веб-программатор (WebSerial):
- Открыть страницу https://crosspointreader.com/#flash-tools в браузере с поддержкой WebSerial (Chrome / Edge).
- Подключить устройство кабелем USB-C к компьютеру, выбрать файл
BookPoint_2.2.4_x4pro.binи нажать Install.
- С карты microSD:
- Скопировать файл
BookPoint_2.2.4_x4pro.binв корневую директорию карты памяти microSD и переименовать его вupdate.bin. - Вставить карту в ридер и выбрать пункт обновления прошивки в системных настройках.
- Скопировать файл
- Беспроводное обновление (OTA):
- Подключить устройство к сети Wi-Fi, перейти в меню «Система» → «Проверить обновления» и подтвердить установку новой версии.
Для устройств с заводской китайской версией прошивки перед первой установкой требуется снять блокировку с помощью утилиты со страницы https://crosspointreader.com/unlock, после чего прошить BookPoint любым из указанных способов.
Проект собирается с помощью PlatformIO.
git clone --recurse-submodules https://github.com/klanva/BookPoint.git
cd BookPoint# Windows
build.bat
# Или через PlatformIO CLI
pio run -e x4proГотовый файл прошивки формируется по пути .pio/build/x4pro/firmware.bin.
Пакет сквозных тестов интерфейса, графических подсистем, парсеров и аппаратных шин:
python tests/e2e/run_e2e_tests.py --allНабор из 243 тестов проверяет логику компонентов UI, декодеров изображений, эмуляторов шины I2C (GT911, BM8563, CW2017) и жестов сенсорного ввода.
Проект распространяется под лицензией MIT.
