diff options
| Commit | d82ab1114579f5561df1485f321f4ba50f30195e (patch) | |
|---|---|---|
| Author | 2024-05-28 09:05:01 +0300 | |
| Committer | 2024-05-28 09:05:01 +0300 | |
| Files | 6e3c5c112d058973ed13983e5cf8a101b656a991 | |
| uni-projects-d82ab1114579f5561df1485f321f4ba50f30195e.tar uni-projects-d82ab1114579f5561df1485f321f4ba50f30195e.tar.gz uni-projects-d82ab1114579f5561df1485f321f4ba50f30195e.zip | ||
| Parent | 303d774212a4dd4e960a75774e9580b8ea7f597b (diff) | |
[iot/goam] Implemented setting to save/send images only/both to spiffs/ws
6 files changed, 90 insertions, 5 deletions
| -rw-r--r-- | Year 3/Internet of things/goam/main/main.c | 25 | ||||
| -rw-r--r-- | Year 3/Internet of things/goam/main/main.h | 3 | ||||
| -rw-r--r-- | Year 3/Internet of things/goam/main/nvs.c | 28 | ||||
| -rw-r--r-- | Year 3/Internet of things/goam/main/nvs.h | 2 | ||||
| -rw-r--r-- | Year 3/Internet of things/goam/main/webserver.c | 20 | ||||
| -rw-r--r-- | Year 3/Internet of things/goam/webserver/index.html | 17 |
diff --git a/Year 3/Internet of things/goam/main/main.c b/Year 3/Internet of things/goam/main/main.c index 82cebe0..8de110f 100644 --- a/Year 3/Internet of things/goam/main/main.c +++ b/Year 3/Internet of things/goam/main/main.c @@ -53,6 +53,22 @@ void print_chip_data() { } /* + * Public interface (settings functions) + */ + +#define SPIFFS_ONLY 0 +#define WS_ONLY 1 +#define BOTH 2 + +static int32_t is = BOTH; + +void main_store_saveimage(int32_t value) { + if (value < 0 && value > BOTH) return; + nvs_write_i32("imagesave", value); + is = value; +} + +/* * On button press */ @@ -73,8 +89,12 @@ void take_photo() { ptc06_set_image_resolution(RES_640X480); char* image; size_t length = ptc06_get_image(&image); - spiffs_write(SPIFFS_PREFIX "/capture.jpeg", image, length); - ws_send_bin(image, length); + if (is != WS_ONLY) { + spiffs_write(SPIFFS_PREFIX "/capture.jpeg", image, length); + } + if (is != SPIFFS_ONLY) { + ws_send_bin(image, length); + } display_printon(DCHAR_CAMERA, 1); free(image); @@ -90,6 +110,7 @@ static TaskHandle_t main_handle = NULL; static void init_camera(void*) { ptc06_init(); + nvs_read_i32("imagesave", &is); if (xTaskNotify(main_handle, INIT_CAMERA_BIT, eSetBits) != pdPASS) { ESP_LOGE(TAG, "Couldnt't notify main of camera init, software will hang"); diff --git a/Year 3/Internet of things/goam/main/main.h b/Year 3/Internet of things/goam/main/main.h new file mode 100644 index 0000000..d6a232d --- /dev/null +++ b/Year 3/Internet of things/goam/main/main.h @@ -0,0 +1,3 @@ +#pragma once + +void main_store_saveimage(uint32_t value); diff --git a/Year 3/Internet of things/goam/main/nvs.c b/Year 3/Internet of things/goam/main/nvs.c index 6f894db..27b805a 100644 --- a/Year 3/Internet of things/goam/main/nvs.c +++ b/Year 3/Internet of things/goam/main/nvs.c @@ -63,3 +63,31 @@ void nvs_read(const char* key, char** output) { nvs_close(inHandle); } + +void nvs_write_i32(const char* key, int32_t value) { + nvs_handle_t outHandle; + ESP_ERROR_CHECK(nvs_open(NVS_GOAM_NAMESPACE, NVS_READWRITE, &outHandle)); + + ESP_ERROR_CHECK(nvs_set_i32(outHandle, key, value)); + + ESP_ERROR_CHECK(nvs_commit(outHandle)); + nvs_close(outHandle); +} + +void nvs_read_i32(const char* key, int32_t* output) { + nvs_handle_t inHandle; + esp_err_t err = nvs_open(NVS_GOAM_NAMESPACE, NVS_READONLY, &inHandle); + if (err == ESP_ERR_NVS_NOT_FOUND) { + nvs_close(inHandle); + return; + } + ESP_ERROR_CHECK(err); + + err = nvs_get_i32(inHandle, key, output); + if (err != ESP_OK) { + nvs_close(inHandle); + return; + } + + nvs_close(inHandle); +} diff --git a/Year 3/Internet of things/goam/main/nvs.h b/Year 3/Internet of things/goam/main/nvs.h index 12aa477..1afd8f7 100644 --- a/Year 3/Internet of things/goam/main/nvs.h +++ b/Year 3/Internet of things/goam/main/nvs.h @@ -3,3 +3,5 @@ void nvs_init(); void nvs_write(const char* key, const char* value); void nvs_read(const char* key, char** output); +void nvs_write_i32(const char* key, int32_t value); +void nvs_read_i32(const char* key, int32_t* output); diff --git a/Year 3/Internet of things/goam/main/webserver.c b/Year 3/Internet of things/goam/main/webserver.c index 5163647..dc28e31 100644 --- a/Year 3/Internet of things/goam/main/webserver.c +++ b/Year 3/Internet of things/goam/main/webserver.c @@ -15,6 +15,7 @@ #include "webserver.h" #include "spiffs.h" #include "wifi.h" +#include "main.h" static const char *TAG = "webserver"; #define MAX_CLIENTS 4 @@ -114,6 +115,24 @@ static const httpd_uri_t post_network = { .handler = post_network_handler, }; +static esp_err_t post_imagesave_handler(httpd_req_t *req) { + char* buffer = malloc(req->content_len + 1); + httpd_req_recv(req, buffer, req->content_len); + + main_store_saveimage((int32_t)(*(strchr(buffer, '=') + 1) - '0')); + + httpd_resp_send(req, "", 0); + free(buffer); + + logi_post(req); + return ESP_OK; +} +static const httpd_uri_t post_imagesave = { + .uri = "/imagesave", + .method = HTTP_POST, + .handler = post_imagesave_handler, +}; + static esp_err_t ws_camera_handler(httpd_req_t *req) { if (req->method == HTTP_GET) { ESP_LOGI(TAG, "Established websocket connection"); @@ -194,6 +213,7 @@ void webserver_start() httpd_register_uri_handler(server, &get_index); 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, &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 13a2bbc..c607453 100644 --- a/Year 3/Internet of things/goam/webserver/index.html +++ b/Year 3/Internet of things/goam/webserver/index.html @@ -27,7 +27,7 @@ article { img { max-width: calc(100vw - 16px - 2em); } -.button, input { +.button, form > * { border: 0.25em solid gray; padding: 0.25em; background-color: lightgray; @@ -52,12 +52,23 @@ iframe { <img src="/spiffs/capture.jpeg"/> <a class="button full-width" href="/spiffs/capture.jpeg" download="capture.jpeg">Click to Download</a> - <h1>Configure static network</h1> <iframe id="dummyframe" name="dummyframe" hidden></iframe> + + <h1>Configure static network</h1> <form action="/network" target="dummyframe" method="POST"> <input id="network-ssid" name="ssid" type="text" placeholder="Name (SSID)"> <input id="network-pass" name="pass" type="text" placeholder="Password"> - <input id="network-submit" class="button" type="submit" value="Save"> + <input class="button" type="submit" value="Save"> + </form> + + <h1>Configure other options</h1> + <form action="/imagesave" target="dummyframe" method="POST"> + <select name="imagesave"> + <option value="0">Only save to camera</option> + <option value="1">Only send to <code>/camera</code> listeners</option> + <option value="2" selected>Save and send</option> + </select> + <input class="button" type="submit" value="Save"> </form> </article> <script> |
