forked from shashwat001/hollow_clock_wifi
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathweb_ui.cpp
More file actions
83 lines (73 loc) · 3.21 KB
/
web_ui.cpp
File metadata and controls
83 lines (73 loc) · 3.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include "web_ui.h"
void setup_web_ui(AsyncWebServer *server, Dashboard **dashboard,
WebUiState *state, WebUiCallbacks callbacks) {
*dashboard = new Dashboard(server);
(*dashboard)->Add("Uptime", [callbacks]() { return callbacks.uptime_text(); },
5000);
(*dashboard)->Add("Time", [callbacks]() { return callbacks.time_text(); },
2000);
(*dashboard)->Add<int>("Current Pos",
[callbacks]() { return callbacks.current_pos(); },
2000);
(*dashboard)->Add<int>("Target",
[callbacks]() { return callbacks.target(); }, 2000);
(*dashboard)->Add("SSID", [callbacks]() { return callbacks.ssid_text(); },
2000);
(*dashboard)->Add("IP", [callbacks]() { return callbacks.ip_text(); }, 2000);
(*dashboard)->Add("NTP Server",
[callbacks]() { return callbacks.ntp_server_text(); },
10000);
(*dashboard)->Add("Status", [callbacks]() { return callbacks.status_text(); },
1000);
(*dashboard)->AddStaticHtml(
"Calibration",
"<div class='calibration-controls'>"
"<strong>Set the current hand position here before starting reset.</strong>"
"<form action='/start-reset' method='get'>"
"<label for='hour'>Hour</label>"
"<input id='hour' name='hour' type='number' min='0' max='23' required>"
"<label for='minute'>Minute</label>"
"<input id='minute' name='minute' type='number' min='0' max='59' required>"
"<button type='submit'>Start Reset</button>"
"</form>"
"</div>");
(*dashboard)->Add<int>("Last reset POS",
[callbacks]() { return callbacks.last_reset_pos(); },
2000);
(*dashboard)->Add<int>(
"Last reset Target",
[callbacks]() { return callbacks.last_reset_target(); }, 2000);
(*dashboard)->Add("Last reset Time",
[callbacks]() { return callbacks.last_reset_time_text(); },
2000);
server->on("/start-reset", HTTP_GET, [callbacks, state](AsyncWebServerRequest *request) {
if (!request->hasArg("hour") || !request->hasArg("minute")) {
request->send(400, "text/plain", "Missing hour or minute parameter");
return;
}
String hour_text = request->arg("hour");
String minute_text = request->arg("minute");
if (hour_text.isEmpty() || minute_text.isEmpty()) {
request->send(400, "text/plain", "Hour and minute are required");
return;
}
if (!callbacks.is_numeric_string(hour_text) ||
!callbacks.is_numeric_string(minute_text)) {
request->send(400, "text/plain", "Hour and minute must be numeric");
return;
}
int hours = hour_text.toInt();
int minutes = minute_text.toInt();
if (!callbacks.set_current_position_from_time(hours, minutes)) {
request->send(400, "text/plain", "Hour or minute is out of range");
return;
}
*state->motion_enabled = true;
*state->is_resetting = true;
*state->calibration_status = "Reset started";
*state->target = callbacks.get_current_time_steps();
callbacks.on_start_reset(*state->target);
request->redirect("/");
});
server->begin();
}