@@ -11,6 +11,10 @@ Resolution
1111<select id="resolution" required>%RESOLUTION_OPTIONS%</select>
1212<input type="submit" value="change">
1313</p></form>
14+ <p id="toggles">
15+ <label><input type="checkbox" data-act="hmirror">hmirror</label>
16+ <label><input type="checkbox" data-act="vflip">vflip</label>
17+ </p>
1418<p id="controls">
1519<button data-act="mjpeg">show Motion JPEG stream</button>
1620<button data-act="jpg">show still JPEG image</button>
@@ -34,7 +38,7 @@ const $resolution = document.querySelector("#resolution");
3438 evt.preventDefault();
3539 const [width, height] = $resolution.value.split("x");
3640 try {
37- const change = await fetchText("/change-resolution.cgi", {
41+ await fetchText("/change-resolution.cgi", {
3842 method: "POST",
3943 body: new URLSearchParams({ width, height }),
4044 });
@@ -43,6 +47,21 @@ const $resolution = document.querySelector("#resolution");
4347 }
4448});
4549
50+ for (const $ctrl of document.querySelectorAll("#toggles input[type=checkbox]")) {
51+ $ctrl.addEventListener("change", async (evt) => {
52+ evt.preventDefault();
53+ const act = evt.target.getAttribute("data-act");
54+ try {
55+ await fetchText(`/set-${act}.cgi`, {
56+ method: "POST",
57+ body: new URLSearchParams({ enable: Number(evt.target.checked) }),
58+ });
59+ } catch (err) {
60+ $display.textContent = err.toString();
61+ }
62+ });
63+ }
64+
4665for (const $ctrl of document.querySelectorAll("#controls button")) {
4766 $ctrl.addEventListener("click", (evt) => {
4867 evt.preventDefault();
@@ -116,6 +135,26 @@ addRequestHandlers() {
116135 request->send (200 , " text/plain" , static_cast <String>(b));
117136 });
118137
138+ server.on (" /set-hmirror.cgi" , HTTP_POST, [](AsyncWebServerRequest* request) {
139+ long enable = request->arg (" enable" ).toInt ();
140+ if (!esp32cam::Camera.update (esp32cam::SetHmirror (enable != 0 ))) {
141+ request->send (500 , " text/plain" , " SetHmirror error\n " );
142+ return ;
143+ }
144+ Serial.printf (" SetHmirror(%ld) success\n " , enable);
145+ request->send (200 , " text/plain" , " SetHmirror success\n " );
146+ });
147+
148+ server.on (" /set-vflip.cgi" , HTTP_POST, [](AsyncWebServerRequest* request) {
149+ long enable = request->arg (" enable" ).toInt ();
150+ if (!esp32cam::Camera.update (esp32cam::SetVflip (enable != 0 ))) {
151+ request->send (500 , " text/plain" , " SetVflip error\n " );
152+ return ;
153+ }
154+ Serial.printf (" SetVflip(%ld) success\n " , enable);
155+ request->send (200 , " text/plain" , " SetVflip success\n " );
156+ });
157+
119158 server.on (" /cam.jpg" , esp32cam::asyncweb::handleStill);
120159 server.on (" /cam.mjpeg" , esp32cam::asyncweb::handleMjpeg);
121160}
0 commit comments