Skip to content

Commit 42b9dec

Browse files
committed
upd
1 parent 38af2ca commit 42b9dec

File tree

8 files changed

+1009
-928
lines changed

8 files changed

+1009
-928
lines changed

docs/1.main.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,9 @@ foo(AnyPtr(buf, 10)); // для char-буфера нужно явно указ
6565
```cpp
6666
Settings(const String& title = "", GyverDB* db = nullptr);
6767

68+
// установить версию прошивки для отображения в меню
69+
void setVersion(const char* ver);
70+
6871
// установить пароль на вебморду. Пустая строка "" чтобы отключить
6972
void setPass(Text pass);
7073

docs/2.start.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ board_build.filesystem = littlefs
7070
Вебморда является самостоятельным веб-приложением, написанным на html/css/js. Её файлы минифицированы, сжаты в gz и вшиты в код библиотеки как PROGMEM массив. В библиотеке настроен вебсервер, который отправляет файлы вебморды при заходе на IP платы в браузере. Лёгкий html файл подгружается каждый раз, а скрипты и стили кешируются браузером для ускорения загрузки. Вебморда общается с платой по http: например при загрузке запрашивает пакет с виджетами и прочей информацией.
7171

7272
### Captive portal
73-
Во всех трёх реализациях сервера из коробки настроен DNS для работы как Captive portal - если ESP работает в режиме точки доступа (AP или AP_STA), то при подключении к точке автоматически откроется окно браузера со страницей настроек.
73+
Во всех трёх реализациях сервера из коробки настроен DNS для работы как Captive portal - если ESP работает в режиме точки доступа (AP или AP_STA), то при подключении к точке автоматически откроется окно браузера со страницей настроек. Если это не нужно - можно отключить, запуская вебморду с флагом на отключение dns: `begin(false)`.
7474

7575
### Приложение для поиска
7676
Позволяет находить устройства с библиотекой в локальной сети и заменяет браузер, вебморда открывается сразу в приложении, кнопка назад возвращает к списку устройств. Чтобы удалить устройство - долгое удержание на нём на смартфоне или правой кнопкой мыши на ПК. Для поиска смартфон/ПК должны быть в одной локальной сети с устройством. В приложении должна быть указана корректная маска подсети (настраивается в роутере). Если в роутере она не менялась - то она там стандартная *255.255.255.0*, как и в приложении по умолчанию.
@@ -108,7 +108,7 @@ void setup() {
108108
Serial.println(WiFi.localIP());
109109

110110
// settings
111-
sett.begin();
111+
sett.begin(); // begin(false) если не нужен captive
112112
sett.onBuild(build);
113113
}
114114

docs/7.other.md

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,62 @@ sett.config.updateTout = 2500;
1515
sett.config.theme = sets::Colors::Green;
1616
```
1717

18+
### Переполнение стека ESP8266
19+
На ESP8266 может случиться переполнение стека, если вызываемая функция слишком большая. Большая буквально - слишком много кода, т.е. это именно та проблема, которая появится при слишком большом билдере для Settings. Решение простое - разделить билдер на несколько функций, передавая в них `sets::Builder& b`:
20+
21+
```cpp
22+
void build_1(sets::Builder& b) {
23+
// виджеты...
24+
}
25+
void build_2(sets::Builder& b) {
26+
// виджеты...
27+
}
28+
void build_3(sets::Builder& b) {
29+
// виджеты...
30+
}
31+
void build_4(sets::Builder& b) {
32+
// виджеты...
33+
}
34+
35+
void build(sets::Builder& b) {
36+
build_1(b);
37+
build_2(b);
38+
build_3(b);
39+
build_4(b);
40+
}
41+
```
42+
43+
Второй вариант - лямбды, он тоже работает:
44+
45+
```cpp
46+
void build(sets::Builder& b) {
47+
[&](){
48+
// виджеты...
49+
}();
50+
51+
[&](){
52+
// виджеты...
53+
}();
54+
}
55+
```
56+
57+
В библиотеке есть удобные макросы:
58+
59+
```cpp
60+
void build(sets::Builder& b) {
61+
SUB_BUILD_BEGIN
62+
// виджеты...
63+
64+
SUB_BUILD_NEXT
65+
// виджеты...
66+
67+
SUB_BUILD_NEXT
68+
// виджеты...
69+
70+
SUB_BUILD_END
71+
}
72+
```
73+
1874
### Статус
1975
- Вебморда отслеживает статус устройства, при потере связи появится текст offline в заголовке страницы. После потери связи вебморда будет запрашивать информацию о виджетах, это очень удобно при разработке - например добавляем виджет, загружаем прошивку. За это время вебморда уже понимает что устройство оффлайн и при первом успешном подключении выводит актуальные виджеты.
2076
- При изменении значений виджетов вебморда следит за доставкой пакета, при ошибке связи появится надпись **error*** у соответствующего виджета

library.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name=Settings
2-
version=1.3.3
2+
version=1.3.4
33
author=AlexGyver <[email protected]>
44
maintainer=AlexGyver <[email protected]>
55
sentence=Simple UI webface builder for esp8266/esp32

src/core/SettingsBase.h

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,15 @@
1414
#include <WiFi.h>
1515
#endif
1616

17-
#include "./core/HybridFS.h"
18-
#include "./core/builder.h"
19-
#include "./core/colors.h"
20-
#include "./core/containers.h"
21-
#include "./core/logger.h"
22-
#include "./core/packet.h"
23-
#include "./core/updater.h"
17+
#include "../web/settings.h"
18+
#include "./HybridFS.h"
19+
#include "./builder.h"
20+
#include "./colors.h"
21+
#include "./containers.h"
22+
#include "./logger.h"
23+
#include "./macro.h"
24+
#include "./packet.h"
25+
#include "./updater.h"
2426

2527
namespace sets {
2628

@@ -123,6 +125,11 @@ class SettingsBase {
123125
// файловая система
124126
HybridFS fs;
125127

128+
// установить версию прошивки для отображения в меню
129+
void setVersion(const char* ver) {
130+
_f_ver = ver;
131+
}
132+
126133
// установить пароль на вебморду. Пустая строка "" чтобы отключить
127134
void setPass(Text pass) {
128135
_passh = pass.hash();
@@ -455,6 +462,7 @@ class SettingsBase {
455462
BuildCallback _build_cb = nullptr;
456463
UpdateCallback _upd_cb = nullptr;
457464
FocusCallback _focus_cb = nullptr;
465+
const char* _f_ver = nullptr;
458466
String _title;
459467
Timer _focus_tmr;
460468
Timer _upd_tmr;
@@ -505,6 +513,8 @@ class SettingsBase {
505513
p[Code::uptime] = millis() / 1000;
506514
p[Code::mac] = getMac();
507515
p[Code::local_ip] = getIP().toString();
516+
p[Code::s_ver] = SETTINGS_VER;
517+
if (_f_ver) p[Code::f_ver] = _f_ver;
508518
if (custom.p) p[Code::custom_hash] = custom.hash;
509519
if (_title.length()) p[Code::title] = _title;
510520
if (_passh) p[Code::granted] = granted;

src/core/codes.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,8 @@ enum class Code : uint8_t {
9191
mac,
9292
local_ip,
9393
spinner,
94+
s_ver,
95+
f_ver,
9496
};
9597

9698
}

src/core/macro.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#pragma once
2+
3+
#define SUB_BUILD_BEGIN [&]() {
4+
#define SUB_BUILD_END }();
5+
#define SUB_BUILD_NEXT SUB_BUILD_END SUB_BUILD_BEGIN

0 commit comments

Comments
 (0)