/
SoRusV
/
Tasmota
Обзор
Документация
Войти
/
SoRusV
/
Tasmota
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
development
lib/lib_display/UDisplay/src/uDisplay_I2C_panel.cpp
61 строка
2 KB
Jason2866
Udisplay use library.json and folders in lib to ensure correct compile and linking (#24122)
15 ноя 2025, 21:00
Не верифицирован
15 ноя 2025, 21:00
309cdd6
Код
Авторство
О чём код?
#include "uDisplay_I2C_panel.h" i2c_panel::i2c_panel(const I2CPanelConfig& config, uint8_t* framebuffer) : cfg(config), framebuffer(framebuffer) { // Execute initialization commands if (cfg.init_commands && cfg.init_commands_count > 0) { for (uint16_t i = 0; i < cfg.init_commands_count; i++) { i2c_command(cfg.init_commands[i]); } } } bool i2c_panel::updateFrame() { if (!framebuffer) return false; i2c_command(cfg.cmd_set_addr_x | 0x0); i2c_command(cfg.page_start | 0x0); i2c_command(cfg.page_end | 0x0); uint8_t ys = cfg.height >> 3; uint8_t xs = cfg.width >> 3; uint8_t m_row = cfg.cmd_set_addr_y; uint8_t m_col = cfg.col_start; uint16_t p = 0; uint8_t i, j, k = 0; for (i = 0; i < ys; i++) { i2c_command(0xB0 + i + m_row); i2c_command(m_col & 0xf); i2c_command(0x10 | (m_col >> 4)); for (j = 0; j < 8; j++) { cfg.wire->beginTransmission(cfg.i2c_address); cfg.wire->write(0x40); for (k = 0; k < xs; k++, p++) { cfg.wire->write(framebuffer[p]); } cfg.wire->endTransmission(); } } return true; } bool i2c_panel::displayOnff(int8_t on) { i2c_command(on ? cfg.cmd_display_on : cfg.cmd_display_off); return true; } bool i2c_panel::invertDisplay(bool invert) { i2c_command(invert ? cfg.cmd_invert_on : cfg.cmd_invert_off); return true; } void i2c_panel::i2c_command(uint8_t val) { cfg.wire->beginTransmission(cfg.i2c_address); cfg.wire->write(0); cfg.wire->write(val); cfg.wire->endTransmission(); }