#include "param.h" #include "http_server.h" #include #include #include void cmd_handle(int)(const char* attr, sockbuf_t* sockbuf, int* ptr) { char op_[8]; char buf_[32]; char* op = read_token(sockbuf, op_, sizeof(op_)); char* value = read_token(sockbuf, buf_, sizeof(buf_)); int curval = *ptr; int ivalue = value ? atoi(value) : 0; if (!strcmp(op, "+=")) { curval += ivalue; } else if (!strcmp(op, "-=")) { curval -= ivalue; } else if (!strcmp(op, "=")) { curval = ivalue; } else { sockbuf_write(sockbuf, "Unknown operation: '"); sockbuf_write(sockbuf, op); sockbuf_write(sockbuf, "'\n"); return; } snprintf(buf_, sizeof(buf_), "%s = %d\n", attr, curval); *ptr = curval; sockbuf_write(sockbuf, buf_); } size_t serialize_to_json(int)( char** out, size_t len, const char* attr, const char* dn, int value) { size_t newlen = snprintf( *out, len, "\"%s\":{\"type\":\"int\",\"value\":\"%d\",\"disp\":\"%s\"}", attr, value, dn); *out += newlen; return len - newlen; } #define TAG "param_int" void http_handle(int)(httpd_req_t* req, int* val) { char buf[128]; int buf_len = httpd_req_get_url_query_len(req) + 1; esp_err_t err; 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 ((err = httpd_req_get_url_query_str(req, buf, buf_len)) == ESP_OK) { char param[32]; if (httpd_query_key_value(buf, "add", param, sizeof(param)) == ESP_OK) { *val += atoi(param); } else if ( httpd_query_key_value(buf, "set", param, sizeof(param)) == ESP_OK) { *val = atoi(param); } else if ( httpd_query_key_value(buf, "sub", param, sizeof(param)) == ESP_OK) { *val -= atoi(param); } else { ESP_LOGI(TAG, "No valid parameters."); httpd_resp_set_status(req, HTTPD_400); return; } } else { ESP_LOGI(TAG, "Unable to get URL query string. [%d]", err); httpd_resp_set_status(req, HTTPD_500); return; } } else { ESP_LOGI(TAG, "No query string provided?"); httpd_resp_set_status(req, HTTPD_400); return; } ESP_LOGI(TAG, "Now equals %d", *val); httpd_resp_set_status(req, HTTPD_204); } void print(int)(sockbuf_t* sockbuf, const char* attr, int val) { char buf[128]; snprintf(buf, sizeof(buf), "%s: %d :: int\n", attr, val); sockbuf_write(sockbuf, buf); }