# Документация GyverHub На этой странице находится полный список всех классов и функций библиотеки. Более подробно по использованию можно почитать на остальных страницах документации. ## Компиляция
Настройки **Перед подключением библиотеки** можно объявить настройки, влияющие на компиляцию библиотеки: ```cpp // BRIDGES #define GH_NO_STREAM // отключить встроенный модуль связи stream #define GH_NO_HTTP // отключить встроенный модуль связи http (для esp) #define GH_NO_WS // отключить встроенный модуль связи ws (для esp) #define GH_NO_MQTT // отключить встроенный модуль связи mqtt (для esp) #define GH_BRIDGE_AMOUNT 5 // количество мостов подключения #define GH_WS_PORT 81 // websocket порт #define GH_MQTT_RECONNECT 10000 // период переподключения встроенного MQTT (для esp) // MODULES #define GH_NO_PAIRS // отключить поддержку типа Pairs #define GH_NO_GET // отключить отправку на get-топик (mqtt) #define GH_NO_INFO // отключить info билдер #define GH_NO_MODULES // отключить "модули" (все включены) #define GH_NO_REQUEST // отключить поддержку запросов // FS #define GH_NO_FS // отключить файловую систему (для esp) #define GH_FETCH_CHUNK_SIZE 512 // размер чанка при скачивании с платы (для esp) #define GH_UPL_CHUNK_SIZE 512 // размер чанка при загрузке на плату (для esp) #define GH_FS_DEPTH 5 // глубина сканирования файловой системы (esp32) // TRANSFER #define GH_NO_FETCH // отключить скачивание файлов (для esp) #define GH_NO_UPLOAD // отключить загрузку файлов (для esp) #define GH_NO_OTA // отключить ОТА обновления (для esp) #define GH_NO_OTA_URL // отключить ОТА по ссылке (для esp) #define GH_REBOOT_DELAY 1500 // задержка перед перезагрузкой после OTA (для esp) // PORTAL #define GH_FILE_PORTAL // загружать сайт из памяти есп (положи файлы в папку /hub/) (для esp) #define GH_INCLUDE_PORTAL // включить сайт в память программы, ~50кБ (не нужно загружать файлы в память) (для esp) // HTTP #define GH_PUBLIC_PATH "/www" // путь к папке с файлами с HTTP доступом (для esp) #define GH_HTTP_PORT 80 // http порт (для esp) #define GH_CACHE_PRD "max-age=604800" // период кеширования файлов для портала (для esp) #define GH_NO_HTTP_TRANSFER // отключить загрузку/скачивание/ОТА по http (для esp) #define GH_NO_HTTP_DNS // отключить DNS сервер (для esp) #define GH_NO_HTTP_OTA // отключить ОТА обновления по http (для esp) #define GH_NO_HTTP_PUBLIC // отключить доступ к файлам по http c ip/www (для esp) #define GH_NO_HTTP_FETCH // отключить скачивание файлов по http (для esp) #define GH_NO_HTTP_UPLOAD // отключить загрузку файлов по http (для esp) #define GH_NO_HTTP_UPLOAD_PORTAL // упрощённую загрузку файлов с ip/hub/upload_portal (для esp) ```
Платформа Библиотека сама определяет, на какой платформе компилируется. Для ESP8266/ESP32 предусмотрен отдельный флаг `GH_ESP_BUILD` (доступен после подключения библиотеки), включюащий сетевые возможности в компиляцию. Для создания кросс-платформенного кода можно "прятать" код для ESP внутри условной конструкции: ```cpp #include #ifdef GH_ESP_BUILD // этот код будет компилироваться только для esp #endif ``` Также в макросе `GH_PLATFORM` содержится название платформы в виде строки: - `"ESP8266"` - `"ESP32"` - `"ESP32-S2"` - `"ESP32-S3"` - `"ESP32-C3"` - `"Arduino"` для всех остальных
## GyverHub
Примечание по типам данных Для удобства в библиотеке используются "универсальные" типы данных. Компилятор сам понимает, что передали в функцию: - `AnyText` - строка в любом виде (`"строка"`, `F("строка")`, `char*`, `String`) - `AnyValue` - любой целочисленный и дробный тип данных + строки в любом виде - `AnyPtr` - указатель (адрес) переменной любого типа (String, char*, все числа) + системные (Colors, Flags, Pos, Button, Log)
Инициализация ```cpp GyverHub; GyverHub(String net); // + имя сети GyverHub(String net, String name); // + имя в списке устройств GyverHub(String net, String name, String icon); // + иконка в списке устройств GyverHub(String net, String name, String icon, uint32_t id); // + вручную задать ID устройства ``` Иконки Font Awesome v5 Solid, бесплатный пак: - [Список иконок](https://fontawesome.com/v5/search?o=r&m=free&s=solid) - Вставлять в "строку" сам символ (глиф) `""` или его код `"f6ad"` - Пустая строка `""` - отключить иконку
Система ```cpp // настроить префикс, название и иконку. Опционально задать свой ID устройства вида 0xXXXXXX (для esp он генерируется автоматически) void config(String prefix, String name = "", String icon = "", uint32_t id = 0); // установить версию прошивки для отображения в Info void setVersion(String v); // установить размер буфера строки для сборки интерфейса (умолч. 1000) void setBufferSize(uint16_t size); // установить пин-код для открытия устройства (значение больше 1000, не может начинаться с 000..) void setPIN(uint32_t pin); uint32_t getPIN(); // прочитать пин-код void begin(); // запустить void end(); // остановить bool tick(); // тикер, вызывать в loop bool addBridge(gh::Bridge* bridge); // добавить мост подключения ```
Статус ```cpp bool running(); // вернёт true, если система запущена bool focused(); // true - интерфейс устройства сейчас открыт на сайте или в приложении bool canSend(); // доступна ли сейчас отправка (функции updateXxx и sendXxx) ```
Обработчики ```cpp // подключить функцию-сборщик интерфейса вида f(gh::Builder& builder) void onBuild(f); // подключить обработчик запроса клиента вида f(gh::Request& request) void onRequest(f); // подключить функцию-сборщик инфо вида f(gh::Info& info) void onInfo(f) ; // подключить обработчик входящих сообщений с веб-консоли вида f(String str) void onCLI(f); // подключить обработчик получения unix времени с клиента вида f(uint32_t unix) void onUnix(f); // подключить обработчик скачивания файлов вида f(gh::Fetcher& fetcher) void onFetch(f); // подключить функцию-обработчик перезагрузки вида f(gh::Reboot res). Будет вызвана перед перезагрузкой void onReboot(f); // подключить обработчик загрузки файлов вида f(String& path). Будет вызван при сохранении файла void onUpload(f); // безопасная загрузка файлов (загружать во временный файл) (умолч. включен, true) void safeUpload(bool state); ```
Отправка ```cpp // отправить текст в веб-консоль. Опционально цвет void sendCLI(AnyText str, gh::Colors col = gh::Colors::Default, gh::Client* client = nullptr); // обновить панель управления в приложении void sendRefresh(gh::Client* client = nullptr); // выполнить js код void sendScript(AnyText script, gh::Client* client = nullptr); // отправить действие (обновить файл, вызвать Confirm/Prompt) void sendAction(AnyText name, gh::Client* client = nullptr); // отправить пуш уведомление void sendPush(AnyText text, gh::Client* client = nullptr); // отправить всплывающее уведомление void sendNotice(AnyText text, gh::Colors col = gh::Colors::Green, gh::Client* client = nullptr); // показать окно с ошибкой void sendAlert(AnyText text, gh::Client* client = nullptr); ```
Обновление ```cpp // обновить виджет. Указать имя виджета (или список), имя функции, клиента (опционально) gh::UpdateInline update(AnyText name, AnyText func, gh::Client* client = nullptr); // обновить виджет. Указать имя виджета (или список), клиента (опционально) gh::UpdateInline update(AnyText name, gh::Client* client = nullptr); // отправить value update на имя виджета int/string/bool void sendUpdate(AnyText name, AnyValue value, gh::Client* client = nullptr); // отправить value update на имя виджета float void sendUpdate(AnyText name, double value, uint8_t dec, gh::Client* client = nullptr); // отправить value update по имени компонента (значение будет прочитано в build). Нельзя вызывать из build. Имена можно передать списком через ; void sendUpdate(AnyText name, gh::Client* client = nullptr); ```
MQTT ```cpp // автоматически отправлять новое состояние на get-топик при изменении через set (умолч. false) void sendGetAuto(bool state); // отправить имя-значение на get-топик (MQTT) int/string/bool void sendGet(AnyText name, AnyValue value); // отправить имя-значение на get-топик (MQTT) float void sendGet(AnyText name, double value, uint8_t dec); // отправить значение по имени компонента на get-топик (MQTT) (значение будет прочитано в build). Имена можно передать списком через ; void sendGet(String name); // отправить MQTT LWT команду на включение/выключение void sendStatus(bool status); // топик статуса для отправки String topicStatus(); // общий топик для подписки String topicDiscover(); // топик устройства для подписки String topicHub(); ```
Чтение билдера ```cpp // получить полный JSON пакет панели управления. Флаг enclose true - обернуть в результат в [] String getUI(bool enclose = false); // получить JSON объект {имя:значение, ...} виджетов (из билдера) String getValues(); // получить значение компонента по имени (из билдера) String getValue(AnyText name); ```
Публичные члены ```cpp uint8_t menu; // номер текущего пункта меню String prefix = ""; String name = ""; String icon = ""; String version = ""; const char* id; gh::Bridge* bridges[GH_BRIDGE_AMOUNT]; Modules modules; gh::HubStream stream; HubMQTT mqtt; ```
## Билдер
Виджеты ```cpp // =================== МЕНЮ ==================== // Меню. Передать пункты меню списком "пункт1;пункт2" + attach, click Widget& Menu(AnyText text); // =================== СТРУКТУРА ==================== // начать строку. Всегда возвращает true bool beginRow(uint8_t width = 1); // закончить строку void endRow(); // начать столбец. Всегда возвращает true bool beginCol(uint8_t width = 1); // закончить столбец void endCol(); // пустой виджет. Параметры: size, square Widget& Space(); // =================== ВВОД ==================== // Поле ввода текста. Параметры: value (текст), color, regex, maxLen, disabled, attach, click + параметры виджета Widget& Input(AnyPtr ptr); Widget& Input_(AnyText name, AnyPtr ptr); // Поле ввода текста. Параметры: value (текст), rows, maxLen, disabled, attach, click + параметры виджета Widget& InputArea(AnyPtr ptr); Widget& InputArea_(AnyText name, AnyPtr ptr); // Поле ввода пароля. Параметры: value (текст), color, regex, maxLen, disabled, attach, click + параметры виджета Widget& Pass(AnyPtr ptr); Widget& Pass_(AnyText name, AnyPtr ptr); // Всплывающее окно подтверждения. Параметры: text (подпись), attach, click. Для активации отправь обновление action() Widget& Confirm(AnyPtr ptr); Widget& Confirm_(AnyText name, AnyPtr ptr); // Всплывающее окно ввода. Параметры: value (значение), text (подпись), attach, click. Для активации отправь обновление action() Widget& Prompt(AnyPtr ptr); Widget& Prompt_(AnyText name, AnyPtr ptr); // Дата. Параметры: value(unix), color, disabled, attach, click + параметры виджета Widget& Date(AnyPtr ptr); Widget& Date_(AnyText name, AnyPtr ptr); // Время. Параметры: value(unix), color, disabled, attach, click + параметры виджета Widget& Time(AnyPtr ptr); Widget& Time_(AnyText name, AnyPtr ptr); // Дата и время. Параметры: value(unix), color, disabled, attach, click + параметры виджета Widget& DateTime(AnyPtr ptr); Widget& DateTime_(AnyText name, AnyPtr ptr); // Слайдер. Параметры: value (значение), color, range, unit, disabled, attach, click + параметры виджета Widget& Slider(AnyPtr ptr); Widget& Slider_(AnyText name, AnyPtr ptr); // Спиннер. Параметры: value (значение), range, unit, disabled, attach, click + параметры виджета Widget& Spinner(AnyPtr ptr); Widget& Spinner_(AnyText name, AnyPtr ptr); // Выпадающий список. Параметры: value (номер пункта), text (список), color, disabled, attach, click + параметры виджета Widget& Select(AnyPtr ptr); Widget& Select_(AnyText name, AnyPtr ptr); // Цвет. Параметры: value (цвет), disabled, attach, click + параметры виджета Widget& Color(AnyPtr ptr); Widget& Color_(AnyText name, AnyPtr ptr); // Выключатель. Параметры: value (состояние), color, disabled, attach, click + параметры виджета Widget& Switch(AnyPtr ptr); Widget& Switch_(AnyText name, AnyPtr ptr); // Выключатель. Параметры: value (состояние), icon, color, fontSize, disabled, attach, click + параметры виджета Widget& SwitchIcon(AnyPtr ptr); Widget& SwitchIcon_(AnyText name, AnyPtr ptr); // Вкладки. Параметры: value (выбранная), text (список), color, disabled, attach, click + параметры виджета. text не обновляется Widget& Tabs(AnyPtr ptr); Widget& Tabs_(AnyText name, AnyPtr ptr); // Кнопка. Параметры: icon, color, fontSize, disabled, attach, click + параметры виджета Widget& Button(gh::Button* ptr); Widget& Button_(AnyText name, gh::Button* ptr); // Кнопки выбора. Параметры: value (флаги), text (список), color, disabled, attach, click + параметры виджета Widget& Flags(gh::Flags* ptr); Widget& Flags_(AnyText name, gh::Flags* ptr); // Джойстик. keep - возвращать в центр, exp - экспоненциальные значения. Параметры: color + параметры виджета Widget& Joystick(Pos* pos = nullptr, bool keep = 0, bool exp = 0); Widget& Joystick_(AnyText name, Pos* pos = nullptr, bool keep = 0, bool exp = 0); // Крестовина. Параметры: color + параметры виджета Widget& Dpad(Pos* pos = nullptr); Widget& Dpad_(AnyText name, Pos* pos = nullptr); // Холст // Холст, рисование. Ширина, длина. Только параметры виджета Widget& BeginCanvas(uint16_t width = 400, uint16_t height = 300, Canvas* cv = nullptr, Pos* pos = nullptr); Widget& BeginCanvas_(AnyText name, uint16_t width = 400, uint16_t height = 300, Canvas* cv = nullptr, Pos* pos = nullptr); // Холст. Ширина, длина. Только параметры виджета Widget& Canvas(uint16_t width = 400, uint16_t height = 300, Canvas* cv = nullptr, Pos* pos = nullptr); Widget& Canvas_(AnyText name, uint16_t width = 400, uint16_t height = 300, gh::Canvas* cv = nullptr, Pos* pos = nullptr, bool begin = false); // завершить холст void EndCanvas(); // =================== ВЫВОД ==================== // Заголовок. Параметры: value (текст), icon, color, align, fontSize + size виджета Widget& Title(AnyValue text); Widget& Title_(AnyText name, AnyValue text); Widget& Title_(AnyText name, Pairs* pairs); // Надпись. Параметры: value (текст), icon, color, align, fontSize + параметры виджета Widget& Label(AnyValue text); Widget& Label_(AnyText name, AnyValue text); Widget& Label_(AnyText name, Pairs* pairs); // Окно с текстом. Параметры: value (текст), rows + параметры виджета Widget& Text(AnyValue text); Widget& Text_(AnyText name, AnyValue text); Widget& Text_(AnyText name, Pairs* pairs); // Окно с текстом. Параметры: value (путь), rows + параметры виджета Widget& TextFile(AnyValue text); Widget& TextFile_(AnyText name, AnyValue text); Widget& TextFile_(AnyText name, Pairs* pairs); // Дисплей. Параметры: value (текст), color, fontSize, rows + параметры виджета Widget& Display(AnyValue text); Widget& Display_(AnyText name, AnyValue text); Widget& Display_(AnyText name, Pairs* pairs); // Картинка. Параметры: value (путь) + параметры виджета Widget& Image(AnyText text); Widget& Image_(AnyText name, AnyText text); Widget& Image_(AnyText name, Pairs* pairs); // Лог. value(текст), rows + параметры виджета Widget& Log(gh::Log* ptr); Widget& Log_(AnyText name, gh::Log* ptr); // Светодиод. Параметры: value (состояние 1/0), color + параметры виджета Widget& LED(AnyPtr ptr); Widget& LED_(AnyText name, AnyPtr ptr); // Светодиод-иконка. Параметры: value (состояние 1/0), icon, fontSize, color + параметры виджета Widget& Icon(AnyPtr ptr); Widget& Icon_(AnyText name, AnyPtr ptr); // Индикаторная шкала. Параметры: value (значение), range, unit, color + параметры виджета Widget& Gauge(AnyPtr ptr); Widget& Gauge_(AnyText name, AnyPtr ptr); // Индикаторная шкала круглая. Параметры: value (значение), range, unit, color + параметры виджета Widget& GaugeRound(AnyPtr ptr); Widget& GaugeRound_(AnyText name, AnyPtr ptr); // Индикаторная шкала линейная. Параметры: value (значение), icon, range, unit, color + параметры виджета Widget& GaugeLinear(AnyPtr ptr); Widget& GaugeLinear_(AnyText name, AnyPtr ptr); // Таблица. Параметры: value (текст или путь) + параметры виджета // text: таблица в формате CSV - разделитель столбцов ; разделитель строк \n // width: ширина, список чисел в процентах (например "30;30;50") // align: выравнивание, список из left | center | right (например "left;right") Widget& Table(AnyText text, AnyText width, AnyText align); Widget& Table_(AnyText name, AnyText text, AnyText width, AnyText align); ```
Параметры виджетов ```cpp // ===================== BLOCK ===================== // Ширина (относительно) и высота (px) виджета Widget& size(uint16_t width, uint16_t height = 0); // Заголовок виджета Widget& label(AnyText str); // Убрать заголовок виджета Widget& noLabel(bool nolabel = true); // Дополнительный заголовок виджета справа Widget& suffix(AnyText str); // Убрать задний фон виджета Widget& noTab(bool notab = true); // Сделать виджет квадратным Widget& square(bool square = true); // Отключить виджет Widget& disabled(bool disable = true); // Подсказка виджета. Пустая строка - убрать подсказку Widget& hint(AnyText str); // ===================== CUSTOM ===================== // int/string/bool поле Widget& param(AnyText key, AnyValue val); // float поле Widget& param(AnyText key, double val, uint8_t dec); // ===================== VALUE ===================== // привязать переменную как значение Widget& valueVar(AnyPtr data); // int/string/bool значение Widget& value(AnyValue val); // float значение Widget& value(double val, uint8_t dec); // ===================== TEXT ===================== // текст Widget& text(AnyText str); // иконка (glyph или unicode) https://fontawesome.com/v5/search?o=r&m=free&s=solid Widget& icon(AnyText str); // максимальная длина текста Widget& maxLen(uint16_t len); // ===================== MISC ===================== // количество строк поля текста Widget& rows(uint16_t rows); // regex для Input и Pass Widget& regex(AnyText str); // выравнивание текста для label/title Widget& align(gh::Align align); // минимум, максимум и шаг изменения значения (float) Widget& range(double min, double max, double step, uint8_t dec = 2); // минимум, максимум и шаг изменения значения (целые числа) template Widget& range(T min, T max, T step); // единицы измерения Widget& unit(AnyText str); // размер шрифта/кнопки Widget& fontSize(uint16_t size); // цвет uint32_t 24 бит Widget& color(uint32_t color); // цвет gh::Colors Widget& color(gh::Colors col); // Действие (обновить файл, вызвать Confirm/Prompt) Widget& action(bool act = 1); // ===================== ACTION ===================== // Проверка на клик по виджету bool click(); // ===================== ATTACH ===================== // Подключить функцию вида void f() Widget& attach(void (*cb)()); // Подключить функцию вида void f(gh::Build& build) Widget& attach(void (*cb)(gh::Build& build)); // Подключить функцию вида void f(gh::Builder& build) Widget& attach(void (*cb)(gh::Builder& build), gh::Builder& b); // Подключить gh::Flag* флаг Widget& attach(gh::Flag* flag); // Подключить bool* флаг Widget& attach(bool* flag); ```
Прочие методы ```cpp // обновить панель управления (по действию с виджета) void refresh(); // был ли запрос на обновление панели управления bool isRefresh(); // включить/выключить вывод виджетов (только для запроса виджетов) bool show(bool en = true); // было изменено значение виджета (сигнал на сохранение) bool changed(); // номер текущего пункта меню uint8_t menu(); // добавить виджеты из JSON строки void addJSON(AnyText text); // добавить виджеты из JSON строки PROGMEM void addJSON_P(PGM_P text); // добавить виджеты из JSON из файла void addJSON_File(AnyText path); ```
## Canvas
Константы ```cpp BUTT, ROUND, SQUARE, PROJECT, BEVEL, MITER, START, END, CENTER, LEFT, RIGHT, ALPHABETIC, TOP, HANGING, MIDDLE, IDEOGRAPHIC, BOTTOM, SRC_OVER, SRC_ATOP, SRC_IN, SRC_OUT, DST_OVER, DST_ATOP, DST_IN, DST_OUT, LIGHTER, COPY, XOR, TXT_TOP, TXT_BOTTOM, TXT_CENTER, TXT_BASELINE, CORNER, CORNERS, RADIUS, ```
Класс ```cpp // подключить внешний буфер void setBuffer(ghc::Packet* pp); // добавить строку кода на js Canvas& custom(AnyText text); // ===================================================== // =============== PROCESSING-LIKE API ================= // ===================================================== // =================== BACKGROUND ====================== // очистить полотно Canvas& clear(); // залить полотно установленным в fill() цветом Canvas& background(); // залить полотно указанным цветом (цвет, прозрачность) Canvas& background(uint32_t hex, uint8_t a = 255); // ======================== FILL ======================= // выбрать цвет заливки (цвет, прозрачность) Canvas& fill(uint32_t hex, uint8_t a = 255); // отключить заливку Canvas& noFill(); // ===================== STROKE ==================== // выбрать цвет обводки (цвет, прозрачность) Canvas& stroke(uint32_t hex, uint8_t a = 255); // отключить обводку Canvas& noStroke(); // толщина обводки, px Canvas& strokeWeight(int v); // соединение линий: CV::MITER (умолч), CV::BEVEL, CV::ROUND Canvas& strokeJoin(CV v); // края линий: CV::PROJECT (умолч), CV::ROUND, CV::SQUARE Canvas& strokeCap(CV v); // ===================== PRIMITIVES ==================== // окружность (x, y, радиус), px Canvas& circle(int x, int y, int r); // линия (координаты начала и конца) Canvas& line(int x1, int y1, int x2, int y2); // точка Canvas& point(int x, int y); // четырёхугольник (координаты углов) Canvas& quadrangle(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4); // треугольник (координаты углов) Canvas& triangle(int x1, int y1, int x2, int y2, int x3, int y3); // прямоугольник Canvas& rect(int x, int y, int w, int h, int tl = -1, int tr = -1, int br = 0, int bl = 0); // квадрат Canvas& square(int x, int y, int w); // режим окружности: CV::CENTER (умолч), CV::CORNER Canvas& ellipseMode(CV mode); // режим прямоугольника: CV::CORNER (умолч), CV::CORNERS, CV::CENTER, CV::RADIUS Canvas& rectMode(CV mode); // ======================= TEXT ======================== // шрифт Canvas& textFont(const char* name); // размер шрифта, px Canvas& textSize(int size); // вывести текст, опционально макс длина Canvas& text(String text, int x, int y, int w = 0); // выравнивание текста // CV::LEFT, CV::CENTER, CV::RIGHT // TXT_TOP, TXT_BOTTOM, TXT_CENTER, TXT_BASELINE Canvas& textAlign(CV h, CV v); // сохранить конфигурацию полотна Canvas& push(); // восстановить конфигурацию полотна Canvas& pop(); // ====================================================== // ================== HTML CANVAS API =================== // ====================================================== // цвет заполнения Canvas& fillStyle(uint32_t hex, uint8_t a = 255); // цвет обводки Canvas& strokeStyle(uint32_t hex, uint8_t a = 255); // цвет тени Canvas& shadowColor(uint32_t hex, uint8_t a = 255); // размытость тени, px Canvas& shadowBlur(int v); // отступ тени, px Canvas& shadowOffsetX(int v); // отступ тени, px Canvas& shadowOffsetY(int v); // края линий: CV::BUTT (умолч), CV::ROUND, CV::SQUARE // https://www.w3schools.com/tags/canvas_linecap.asp Canvas& lineCap(CV v); // соединение линий: CV::MITER (умолч), CV::BEVEL, CV::ROUND // https://www.w3schools.com/tags/canvas_linejoin.asp Canvas& lineJoin(CV v); // ширина линий, px Canvas& lineWidth(int v); // длина соединения CV::MITER, px // https://www.w3schools.com/tags/canvas_miterlimit.asp Canvas& miterLimit(int v); // шрифт: "30px Arial" // https://www.w3schools.com/tags/canvas_font.asp Canvas& font(AnyText v); // выравнивание текста: CV::START (умолч), CV::END, CV::CENTER, CV::LEFT, CV::RIGHT // https://www.w3schools.com/tags/canvas_textalign.asp Canvas& textAlign(CV v); // позиция текста: CV::ALPHABETIC (умолч), CV::TOP, CV::HANGING, CV::MIDDLE, CV::IDEOGRAPHIC, CV::BOTTOM // https://www.w3schools.com/tags/canvas_textbaseline.asp Canvas& textBaseline(CV v); // прозрачность рисовки, 0.0-1.0 Canvas& globalAlpha(float v); // тип наложения графики: CV::SRC_OVER (умолч), CV::SRC_ATOP, CV::SRC_IN, CV::SRC_OUT, CV::DST_OVER, CV::DST_ATOP, CV::DST_IN, CV::DST_OUT, CV::LIGHTER, CV::COPY, CV::XOR // https://www.w3schools.com/tags/canvas_globalcompositeoperation.asp Canvas& globalCompositeOperation(CV v); // прямоугольник Canvas& drawRect(int x, int y, int w, int h); // скруглённый прямоугольник Canvas& roundRect(int x, int y, int w, int h, int tl = 0, int tr = -1, int br = -1, int bl = -1); // закрашенный прямоугольник Canvas& fillRect(int x, int y, int w, int h); // обведённый прямоугольник Canvas& strokeRect(int x, int y, int w, int h); // очистить область Canvas& clearRect(int x, int y, int w, int h); // залить Canvas& fill(); // обвести Canvas& stroke(); // начать путь Canvas& beginPath(); // переместить курсор Canvas& moveTo(int x, int y); // завершить путь (провести линию на начало) Canvas& closePath(); // нарисовать линию от курсора Canvas& lineTo(int x, int y); // ограничить область рисования // https://www.w3schools.com/tags/canvas_clip.asp Canvas& clip(); // провести кривую // https://www.w3schools.com/tags/canvas_quadraticcurveto.asp Canvas& quadraticCurveTo(int cpx, int cpy, int x, int y); // провести кривую Безье // https://www.w3schools.com/tags/canvas_beziercurveto.asp Canvas& bezierCurveTo(int cp1x, int cp1y, int cp2x, int cp2y, int x, int y); // провести дугу (радианы) // https://www.w3schools.com/tags/canvas_arc.asp Canvas& arc(int x, int y, int r, float sa = 0, float ea = TWO_PI, bool ccw = 0); // скруглить // https://www.w3schools.com/tags/canvas_arcto.asp Canvas& arcTo(int x1, int y1, int x2, int y2, int r); // масштабировать область рисования // https://www.w3schools.com/tags/canvas_scale.asp Canvas& scale(int sw, int sh); // вращать область рисования (в радианах) // https://www.w3schools.com/tags/canvas_rotate.asp Canvas& rotate(float v); // перемещать область рисования // https://www.w3schools.com/tags/canvas_translate.asp Canvas& translate(int x, int y); // вывести закрашенный текст, опционально макс. длина Canvas& fillText(AnyText text, int x, int y, int w = 0); // вывести обведённый текст, опционально макс. длина Canvas& strokeText(AnyText text, int x, int y, int w = 0); // вывести картинку // https://www.w3schools.com/tags/canvas_drawimage.asp Canvas& drawImage(AnyText img, int x, int y); Canvas& drawImage(AnyText img, int x, int y, int w); Canvas& drawImage(AnyText img, int x, int y, int w, int h); Canvas& drawImage(AnyText img, int sx, int sy, int sw, int sh, int x, int y, int w, int h); // сохранить конфигурацию полотна Canvas& save(); // восстановить конфигурацию полотна Canvas& restore(); ```
Обновление ```cpp gh::CanvasUpdate(AnyText name, GyverHub* hub, Client* client = nullptr); // отправить void send(); ```
## Типы данных
gh::Align ```cpp Left Center Right ```
gh::Action ```cpp UI Read Set Get None ```
gh::Reboot ```cpp None Button Ota OtaUrl ```
gh::Connection ```cpp Serial Bluetooth WS MQTT HTTP Telegram System ```
gh::CMD ```cpp UI Ping Unfocus Info Files Format Reboot FetchNext Data Set Get Read CLI Delete Rename Create FsAbort Fetch Upload UploadChunk Ota OtaChunk OtaUrl Unix Search Discover Unknown ```
gh::Colors ```cpp Red = 0xcb2839, Orange = 0xd55f30, Yellow = 0xd69d27, Green = 0x37A93C, Mint = 0x25b18f, Aqua = 0x2ba1cd, Blue = 0x297bcd, Violet = 0x825ae7, Pink = 0xc8589a, Default = 0xffffffff, ```
gh::Module ```cpp ModUI ModInfo ModSet ModRead ModGet ModData ModReboot ModFiles ModFormat ModDelete ModRename ModCreate ModFetch ModUpload ModOta ModOtaUrl ```
## Классы
gh::Button ```cpp // состояние кнопки изменилось bool changed(); // состояние кнопки (1 нажата, 0 отпущена) bool state(); // клик по кнопке bool clicked(); ```
gh::Color ```cpp uint8_t r = 0, g = 0, b = 0; Color(uint8_t gray); Color(Colors color); Color(uint32_t hex, bool f); Color(uint8_t v1, uint8_t v2, uint8_t v3, bool hsv = 0); // установить RGB цвет void setRGB(uint8_t nr, uint8_t ng, uint8_t nb); // установить серый цвет 0.. 255 void setGray(uint8_t gray); // установить цвет 24-бит RGB void setHEX(uint32_t hex); // установить цвет 16-бит RGB void set565(uint16_t col); // установить цвет HSV void setHSV(uint8_t h, uint8_t s, uint8_t v); // установить цвет по радуге (0.. 255) void setHue(uint8_t color); // получить 24-бит RGB цвет uint32_t getHEX(); // получить 16-бит RGB цвет uint16_t get565(); ```
gh::CSVFile ```cpp // создать таблицу (путь, столбцов, строк) CSVFile(const char* path, uint8_t cols, uint16_t rows = 0); // добавить int/string/bool CSVFile& add(AnyValue value); // добавить float CSVFile& add(double value, uint8_t dec); // завершить строку void endRow(bool close = true); // получить значение ячейки (столбец, строка) String get(uint8_t col, uint16_t row); // очистить таблицу void clear(); // пересчитать количество строк (после ручного изменения) void update(); ```
gh::CSV ```cpp // создать таблицу (столбцов, строк) CSV(uint8_t cols, uint16_t rows = 0); // зарезервировать строку void reserve(uint32_t res); // добавить int/string/bool CSV& add(AnyValue value); // добавить float CSV& add(double value, uint8_t dec); // завершить строку void endRow(); // получить значение ячейки (столбец, строка) String get(uint8_t col, uint16_t row); // очистить таблицу void clear(); // пересчитать количество строк (после ручного изменения) void update(); ```
gh::Flag ```cpp bool changed(); ```
gh::Flags ```cpp Flags(); Flags(uint16_t nflags); void clear(uint8_t idx); void set(uint8_t idx); void write(uint8_t idx, uint8_t val); uint8_t get(uint8_t idx); String toString(); ```
gh::Log ```cpp // начать и указать размер буфера void begin(int n = 64); // остановить void end(); // прочитать в строку void read(String* s, bool esc = false); // прочитать строкой String read(); // очистить void clear(); // есть данные bool available(); // запущен bool state(); // длина int length(); ```
gh::Pos ```cpp bool changed(); // расстояние до точки uint16_t dist(int16_t x1, int16_t y1); // точка лежит внутри прямоугольника bool inRect(int16_t rx, int16_t ry, uint16_t w, uint16_t h); // точка лежит внутри окружности bool inCircle(int16_t cx, int16_t cy, uint16_t r); // координата x int16_t x = 0; // координата y int16_t y = 0; ```
gh::Timer ```cpp // указать время. Таймер сам запустится в режиме интервала! Timer(uint32_t ms, uint32_t seconds = 0, uint32_t minutes = 0, uint32_t hours = 0, uint32_t days = 0); // =========== MANUAL =========== // установить период void setTime(uint32_t ms, uint32_t seconds = 0, uint32_t minutes = 0, uint32_t hours = 0, uint32_t days = 0); // получить период uint32_t getTime(); // запустить в режиме интервала (передать true для режима таймаута) void start(bool timeout = false); // запустить в режиме таймаута void startTimeout(); // запустить в режиме интервала void startInterval(); // перезапустить в текущем режиме void restart(); // остановить void stop(); // состояние (запущен?) bool state(); // подключить функцию-обработчик вида void f() void attach(TimerCallback callback); // отключить функцию-обработчик void detach(); // тикер, вызывать в loop. Вернёт true, если сработал bool tick(); ```
## Системные классы
gh::Bridge ```cpp Bridge(void* hub, Connection conn, ghc::ParseHook parse); // настроить void config(void* hub, Connection conn, ghc::ParseHook parse); // парсить url=data или url + data отдельно void parse(AnyText url, AnyText data); virtual void begin(){}; virtual void end(){}; virtual void tick(){}; virtual void send(BridgeData& data){}; Connection connection(); // тип подключения void enable(); // включить void disable(); // выключить bool state(); // статус включен или выключен void setFocus(); // установить focus void clearFocus(); // снять focus bool getFocus(); // получить focus ```
gh::Build ```cpp const Action action; // тип билда Client& client; // клиент const AnyText name; // имя компонента const AnyText value; // значение компонента bool isSet(); // билд-действие bool isUI(); // билд-запрос виджетов Color valueColor(); // получить значение как Color Flags valueFlags(); // получить значение как Flags Pos valuePos(); // получить значение как Pos ```
gh::Client ```cpp // тип подключения Connection connection(); // id клиента AnyText id; ```
gh::FS ```cpp File openRead(String path); File openAdd(String path); File openWrite(String path); bool begin(); void end(); bool mounted(); void format(); bool remove(String path, bool remdir = true); bool rename(String from, String to); bool exists(String path); uint64_t freeSpace(); uint64_t totalSpace(); uint64_t usedSpace(); void mkdir(String path); void rmdir(String path); void listDir(String& str, String path, char div); void showFiles(String& answ, String path, uint8_t levels = 0, uint32_t* count = nullptr); ```
ghc::Modules ```cpp uint16_t mods = 0; void set(uint16_t nmods); void clear(uint16_t nmods); void setAll(); void clearAll(); bool read(gh::Module m); bool read(uint16_t m); ```
gh::Request ```cpp Client& client; // клиент const CMD cmd; // событие AnyText name; // имя AnyText value; // значение ```
gh::Fetcher ```cpp // отправить файл по пути void fetchFile(const char* path); // отправить файл template void fetchFile(T& file); // отправить сырые данные void fetchBytes(uint8_t* bytes, uint32_t len); // отправить сырые данные из PGM void fetchBytes_P(const uint8_t* bytes, uint32_t len); // true - начало скачивания bool start; // путь к скачиваемому файлу AnyText path; ```
gh::Info ```cpp // добавить int/string/bool поле в info void add(AnyText label, AnyValue val); // добавить float поле в info void add(AnyText label, double val, uint8_t dec); const Client& client; Type type; // Info::Type // Version // Network // Memory // System ```
gh::Update ```cpp Update(GyverHub* hub, Client* client = nullptr); // начать обновление по имени виджета (или список) + имя функции Widget& update(AnyText name, AnyText func); // отправить пакет void send(); // текущий виджет для установки значений ghc::Widget widget; ```
## Функции
Read ```cpp // получить текстовое значение типа CMD для вывода в порт FSTR gh::readCMD(CMD cmd); // получить текстовое значение типа Connection для вывода в порт FSTR gh::readConnection(Connection connection); // получить текстовое значение типа Action для вывода в порт FSTR gh::readAction(Action action); // получить текстовое значение типа Reboot для вывода в порт FSTR gh::readReboot(Reboot reason); ```
Position ```cpp // расстояние между двумя точками uint16_t gh::dist(int16_t x0, int16_t y0, int16_t x1, int16_t y1); // точка лежит внутри прямоугольника (координаты угла и размеры) bool gh::inRect(int16_t x, int16_t y, int16_t rx, int16_t ry, uint16_t w, uint16_t h); // точка лежит внутри окружности (координаты центра и радиус) bool gh::inCircle(int16_t x, int16_t y, int16_t cx, int16_t cy, uint16_t r); ```