#include "param.h" #include "http_server.h" void cmd_handle(bool)(const char* attr, sockbuf_t* sockbuf, bool* ptr) { char buf_[32]; char* op = read_token(sockbuf, buf_, sizeof(buf_)); bool curval = *ptr; if (!strcmp(op, "on")) { curval = 1; } else if (!strcmp(op, "off")) { curval = 0; } else if (!strcmp(op, "toggle")) { curval = !curval; } else { sockbuf_write(sockbuf, "Invalid value: '"); sockbuf_write(sockbuf, op); sockbuf_write(sockbuf, "'\n"); return; } *ptr = curval; snprintf(buf_, sizeof(buf_), "%s = %s\n", attr, curval ? "on" : "off"); sockbuf_write(sockbuf, buf_); } size_t serialize_to_json(bool)( char** out, size_t len, const char* attr, const char* dn, bool value) { size_t newlen = snprintf( *out, len, "\"%s\":{\"type\":\"bool\",\"value\":\"%s\",\"disp\":\"%s\"}", attr, value ? "on" : "off", dn); *out += newlen; return len - newlen; } #define TAG "serialize" void http_handle(bool)(httpd_req_t* req, bool* val) { char buf[128]; int buf_len = httpd_req_get_url_query_len(req) + 1; if (buf_len > 1) { if (buf_len > sizeof(buf)) { ESP_LOGI(TAG, "Invalid request. Query string too long."); httpd_resp_set_status(req, HTTPD_400); return; } if (httpd_req_get_url_query_str(req, buf, buf_len) == ESP_OK) { char param[32]; if (httpd_query_key_value(buf, "set", param, sizeof(param)) == ESP_OK) { if (!strcmp(param, "on")) { *val = true; } else if (!strcmp(param, "off")) { *val = false; } else if (!strcmp(param, "toggle")) { *val = !*val; } else { ESP_LOGI(TAG, "Invalid request. Invalid param value."); httpd_resp_set_status(req, HTTPD_400); return; } } } } httpd_resp_set_status(req, HTTPD_204); } void print(bool)(sockbuf_t* sockbuf, const char* attr, bool val) { char buf[128]; snprintf(buf, sizeof(buf), "%s: %s :: bool\n", attr, val ? "on" : "off"); sockbuf_write(sockbuf, buf); }