MeshTalos/main/lib/meshtalos.c
2025-12-16 23:27:19 +08:00

58 lines
1.5 KiB
C

#include "meshtalos.h"
#include "freertos/idf_additions.h"
#include "lib/mongoose.h"
#include <string.h>
uint8_t image_buf[IMAGE_SIZE] = {0};
bool flag_refresh = true;
static void ev_handler(struct mg_connection *c, int ev, void *ev_data) {
// struct Storage *storage = (struct Storage *)(ev_data);
if (ev == MG_EV_HTTP_MSG) { // New HTTP request received
struct mg_http_message *hm =
(struct mg_http_message *)ev_data; // Parsed HTTP request
if (mg_match(hm->uri, mg_str("/api/tag"), NULL)) { // REST API call?
if (hm->body.len == sizeof(image_buf)) {
memcpy(image_buf, hm->body.buf, sizeof(image_buf));
struct sync_jobs jb;
xQueueSend(sub_jobs, &jb, 0);
mg_http_reply(c, 200, "", "fin");
flag_refresh = true;
return;
}
mg_http_reply(c, 400, "", "bad");
} else {
mg_http_reply(c, 404, "", "bad req");
}
}
}
struct Meshtalos *mtsh_init() {
struct Meshtalos *mtsh = calloc(1, sizeof(struct Meshtalos));
if (mtsh == NULL) {
return NULL;
}
// if ((mtsh->storage = storage_init()) == NULL) {
// goto lfs_err;
// }
mg_mgr_init(&mtsh->mg);
return mtsh;
// lfs_err:
// if (mtsh != NULL) {
// free(mtsh);
// }
// return NULL;
}
void mtsh_listen(struct Meshtalos *mtsh, const char *http_endpoint) {
mg_http_listen(&mtsh->mg, http_endpoint, ev_handler, &mtsh->storage);
mtsh_tcp_sender(&mtsh->mg);
for (;;) {
mg_mgr_poll(&mtsh->mg, 1000);
}
}