Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
Commit14ecb955554ce95ffd0d10a8a0a3cd11b058bcdb (patch)
Author
 Syndamia <kamen@syndamia.com>
2024-05-28 11:12:13 +0300
Committer
 Syndamia <kamen@syndamia.com>
2024-05-28 11:12:13 +0300
Files9803e2a46adf9cdec555ae9456a414f6c6820b2a
uni-projects-14ecb955554ce95ffd0d10a8a0a3cd11b058bcdb.tar
uni-projects-14ecb955554ce95ffd0d10a8a0a3cd11b058bcdb.tar.gz
uni-projects-14ecb955554ce95ffd0d10a8a0a3cd11b058bcdb.zip
Parentc630b3ddebebb7ee5ec3a279939e89a700d8a8ce (diff)
[iot/goam] Implemented resolution setting
diff --git a/Year 3/Internet of things/goam/ibm-vga-8x16.xcf b/Year 3/Internet of things/goam/ibm-vga-8x16.xcf
index 1c2f439..349cee5 100644
--- a/Year 3/Internet of things/goam/ibm-vga-8x16.xcf
+++ b/Year 3/Internet of things/goam/ibm-vga-8x16.xcf
Binary files differ
diff --git a/Year 3/Internet of things/goam/main/display.h b/Year 3/Internet of things/goam/main/display.h
index 75a0012..d3e8779 100644
--- a/Year 3/Internet of things/goam/main/display.h
+++ b/Year 3/Internet of things/goam/main/display.h
@@ -20,6 +20,9 @@ void display_printat(const char* str, unsigned char line, unsigned char column);
#define CHAR_IS_SEND "\15"
#define CHAR_IS_STORE "\16"
+#define CHAR_HALF_RES "\20"
+#define CHAR_QUART_RES "\21"
+
/* Double-width custom characters */
#define DCHAR_CAMERA "\1\2"
diff --git a/Year 3/Internet of things/goam/main/ibm-vga-8x16.c b/Year 3/Internet of things/goam/main/ibm-vga-8x16.c
index f4f491f..2791ad1 100644
--- a/Year 3/Internet of things/goam/main/ibm-vga-8x16.c
+++ b/Year 3/Internet of things/goam/main/ibm-vga-8x16.c
@@ -145,6 +145,27 @@ const uint8_t bitpixel_chars[256][16] = {
COL(0000000000000000)
},
+ ['\20'] = {
+ COL(0000110011111000)
+ COL(0000011011111000)
+ COL(0100001100000000)
+ COL(0110010110000000)
+ COL(0111010011000000)
+ COL(0101110001100000)
+ COL(0100100000100000)
+ COL(0000000000000000)
+ },
+ ['\21'] = {
+ COL(0000110011111000)
+ COL(0000011011111000)
+ COL(0001001100000000)
+ COL(0001100110000000)
+ COL(0001110011000000)
+ COL(0111111001100000)
+ COL(0111111100100000)
+ COL(0000000000000000)
+ },
+
/* Standard characters */
[' '] = {
diff --git a/Year 3/Internet of things/goam/main/main.c b/Year 3/Internet of things/goam/main/main.c
index 4d44376..bceab07 100644
--- a/Year 3/Internet of things/goam/main/main.c
+++ b/Year 3/Internet of things/goam/main/main.c
@@ -85,6 +85,31 @@ void main_store_saveimage(int32_t value) {
display_imagesave();
}
+static int32_t res = RES_640X480;
+
+static void display_resolution() {
+ const char* icon;
+ switch (res) {
+ case RES_640X480: icon = " "; break;
+ case RES_320X240: icon = CHAR_HALF_RES; break;
+ case RES_160X120: icon = CHAR_QUART_RES; break;
+ default: return;
+ }
+ display_printat(icon,
+ CONFIG_DISPLAY_ICONS_ROW,
+ CONFIG_RESOLUTION_COLUMN);
+}
+
+void main_store_resolution(int32_t value) {
+ if (value != RES_640X480 && value != RES_320X240 && value != RES_160X120) {
+ ESP_LOGW(TAG, "Invalid value for resolution was passed, not assigning");
+ return;
+ }
+ nvs_write_i32("resolution", value);
+ res = value;
+ display_resolution();
+}
+
/*
* On button press
*/
@@ -165,6 +190,8 @@ void app_main(void)
CONFIG_CAMERA_COLUMN);
nvs_read_i32("imagesave", &is);
display_imagesave();
+ nvs_read_i32("resolution", &res);
+ display_resolution();
// This is really slow
wifi_init();
diff --git a/Year 3/Internet of things/goam/main/main.h b/Year 3/Internet of things/goam/main/main.h
index d6a232d..b08e83f 100644
--- a/Year 3/Internet of things/goam/main/main.h
+++ b/Year 3/Internet of things/goam/main/main.h
@@ -1,3 +1,4 @@
#pragma once
void main_store_saveimage(uint32_t value);
+void main_store_resolution(int32_t value);
diff --git a/Year 3/Internet of things/goam/main/webserver.c b/Year 3/Internet of things/goam/main/webserver.c
index dc28e31..6da93ef 100644
--- a/Year 3/Internet of things/goam/main/webserver.c
+++ b/Year 3/Internet of things/goam/main/webserver.c
@@ -133,6 +133,24 @@ static const httpd_uri_t post_imagesave = {
.handler = post_imagesave_handler,
};
+static esp_err_t post_resolution_handler(httpd_req_t *req) {
+ char* buffer = malloc(req->content_len + 1);
+ httpd_req_recv(req, buffer, req->content_len);
+
+ main_store_resolution((int32_t)(strtol(strchr(buffer, '=') + 2, NULL, 16)));
+
+ httpd_resp_send(req, "", 0);
+ free(buffer);
+
+ logi_post(req);
+ return ESP_OK;
+}
+static const httpd_uri_t post_resolution = {
+ .uri = "/resolution",
+ .method = HTTP_POST,
+ .handler = post_resolution_handler,
+};
+
static esp_err_t ws_camera_handler(httpd_req_t *req) {
if (req->method == HTTP_GET) {
ESP_LOGI(TAG, "Established websocket connection");
@@ -214,6 +232,7 @@ void webserver_start()
httpd_register_uri_handler(server, &get_image);
httpd_register_uri_handler(server, &post_network);
httpd_register_uri_handler(server, &post_imagesave);
+ httpd_register_uri_handler(server, &post_resolution);
httpd_register_uri_handler(server, &ws_camera);
ESP_LOGI(TAG, "Started server on port %d", config.httpd.server_port);
diff --git a/Year 3/Internet of things/goam/webserver/index.html b/Year 3/Internet of things/goam/webserver/index.html
index 081b15b..27f24df 100644
--- a/Year 3/Internet of things/goam/webserver/index.html
+++ b/Year 3/Internet of things/goam/webserver/index.html
@@ -78,6 +78,15 @@ iframe {
</select>
<input class="button" type="submit" value="Apply">
</form>
+ <br>
+ <form action="/resolution" target="dummyframe" method="POST">
+ <select name="resolution">
+ <option value="0" selected>640x480</option>
+ <option value="&#x11;">320x240</option>
+ <option value="&#x22;">160x120</option>
+ </select>
+ <input class="button" type="submit" value="Apply">
+ </form>
</article>
<script>
const dummyframe = document.getElementById("dummyframe");