diff options
| Commit | 14ecb955554ce95ffd0d10a8a0a3cd11b058bcdb (patch) | |
|---|---|---|
| Author | 2024-05-28 11:12:13 +0300 | |
| Committer | 2024-05-28 11:12:13 +0300 | |
| Files | 9803e2a46adf9cdec555ae9456a414f6c6820b2a | |
| uni-projects-14ecb955554ce95ffd0d10a8a0a3cd11b058bcdb.tar uni-projects-14ecb955554ce95ffd0d10a8a0a3cd11b058bcdb.tar.gz uni-projects-14ecb955554ce95ffd0d10a8a0a3cd11b058bcdb.zip | ||
| Parent | c630b3ddebebb7ee5ec3a279939e89a700d8a8ce (diff) | |
[iot/goam] Implemented resolution setting
7 files changed, 80 insertions, 0 deletions
| -rw-r--r-- | Year 3/Internet of things/goam/ibm-vga-8x16.xcf | bin | 101352 -> 101047 bytes | |||
| -rw-r--r-- | Year 3/Internet of things/goam/main/display.h | 3 | ||||
| -rw-r--r-- | Year 3/Internet of things/goam/main/ibm-vga-8x16.c | 21 | ||||
| -rw-r--r-- | Year 3/Internet of things/goam/main/main.c | 27 | ||||
| -rw-r--r-- | Year 3/Internet of things/goam/main/main.h | 1 | ||||
| -rw-r--r-- | Year 3/Internet of things/goam/main/webserver.c | 19 | ||||
| -rw-r--r-- | Year 3/Internet of things/goam/webserver/index.html | 9 |
diff --git a/Year 3/Internet of things/goam/ibm-vga-8x16.xcf b/Year 3/Internet of things/goam/ibm-vga-8x16.xcf Binary files differindex 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 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="">320x240</option> + <option value=""">160x120</option> + </select> + <input class="button" type="submit" value="Apply"> + </form> </article> <script> const dummyframe = document.getElementById("dummyframe"); |
