#include "control_plane.h"
#include "rest_server_internal.h"
#include "esp_http_server.h"
#include "esp_log.h"
static const char *TAG = "rest_server";
static httpd_handle_t s_server;
static const char *s_web_index =
"\n"
"\n"
"
\n"
" \n"
" \n"
" TQ Voice Console\n"
" \n"
"\n"
"\n"
" \n"
"
TQ Voice Console
\n"
"
ESP32-S3 本地语音控制页。用于单轮语音对话(Tap2Talk)。
\n"
"\n"
"
\n"
" \n"
"
\n"
"
语音状态:初始化中
\n"
"
\n"
"\n"
" \n"
"\n"
"\n"
;
static esp_err_t index_get(httpd_req_t *req) {
httpd_resp_set_type(req, "text/html; charset=utf-8");
httpd_resp_set_hdr(req, "Cache-Control", "no-store");
return httpd_resp_send(req, s_web_index, HTTPD_RESP_USE_STRLEN);
}
static esp_err_t favicon_get(httpd_req_t *req) {
httpd_resp_set_status(req, "204 No Content");
return httpd_resp_send(req, NULL, 0);
}
esp_err_t rest_server_start(void) {
if (s_server != NULL) {
return ESP_OK;
}
httpd_config_t config = HTTPD_DEFAULT_CONFIG();
config.server_port = CONFIG_TQ_HTTP_PORT;
config.uri_match_fn = httpd_uri_match_wildcard;
config.max_uri_handlers = 20;
config.stack_size = 10240;
#if CONFIG_FREERTOS_UNICORE
config.core_id = 0;
#else
config.core_id = 1;
#endif
esp_err_t err = httpd_start(&s_server, &config);
if (err != ESP_OK) {
ESP_LOGE(TAG, "httpd_start failed: %s", esp_err_to_name(err));
return err;
}
httpd_uri_t index = {
.uri = "/",
.method = HTTP_GET,
.handler = index_get,
};
httpd_register_uri_handler(s_server, &index);
httpd_uri_t favicon = {
.uri = "/favicon.ico",
.method = HTTP_GET,
.handler = favicon_get,
};
httpd_register_uri_handler(s_server, &favicon);
httpd_uri_t health = {
.uri = "/v1/health",
.method = HTTP_GET,
.handler = rest_server_health_get,
};
httpd_register_uri_handler(s_server, &health);
httpd_uri_t connect = {
.uri = "/v1/printer/connect",
.method = HTTP_POST,
.handler = rest_server_connect_post,
};
httpd_register_uri_handler(s_server, &connect);
httpd_uri_t disconnect = {
.uri = "/v1/printer/disconnect",
.method = HTTP_POST,
.handler = rest_server_disconnect_post,
};
httpd_register_uri_handler(s_server, &disconnect);
httpd_uri_t status = {
.uri = "/v1/printer/status",
.method = HTTP_GET,
.handler = rest_server_status_get,
};
httpd_register_uri_handler(s_server, &status);
httpd_uri_t voice_status = {
.uri = "/v1/voice/status",
.method = HTTP_GET,
.handler = rest_server_voice_status_get,
};
httpd_register_uri_handler(s_server, &voice_status);
httpd_uri_t voice_session_start = {
.uri = "/v1/voice/session/start",
.method = HTTP_POST,
.handler = rest_server_voice_session_start_post,
};
httpd_register_uri_handler(s_server, &voice_session_start);
httpd_uri_t voice_session_stop = {
.uri = "/v1/voice/session/stop",
.method = HTTP_POST,
.handler = rest_server_voice_session_stop_post,
};
httpd_register_uri_handler(s_server, &voice_session_stop);
httpd_uri_t voice_tap_start = {
.uri = "/v1/voice/tap/start",
.method = HTTP_POST,
.handler = rest_server_voice_tap_start_post,
};
httpd_register_uri_handler(s_server, &voice_tap_start);
httpd_uri_t voice_tap_cancel = {
.uri = "/v1/voice/tap/cancel",
.method = HTTP_POST,
.handler = rest_server_voice_tap_cancel_post,
};
httpd_register_uri_handler(s_server, &voice_tap_cancel);
httpd_uri_t print_raster = {
.uri = "/v1/print/raster",
.method = HTTP_POST,
.handler = rest_server_print_raster_post,
};
httpd_register_uri_handler(s_server, &print_raster);
httpd_uri_t print_image = {
.uri = "/v1/print/image",
.method = HTTP_POST,
.handler = rest_server_print_image_post,
};
httpd_register_uri_handler(s_server, &print_image);
httpd_uri_t print_text = {
.uri = "/v1/print/text",
.method = HTTP_POST,
.handler = rest_server_print_text_post,
};
httpd_register_uri_handler(s_server, &print_text);
httpd_uri_t jobs = {
.uri = "/v1/jobs",
.method = HTTP_GET,
.handler = rest_server_jobs_get,
};
httpd_register_uri_handler(s_server, &jobs);
httpd_uri_t job = {
.uri = "/v1/jobs/*",
.method = HTTP_GET,
.handler = rest_server_job_get,
};
httpd_register_uri_handler(s_server, &job);
ESP_LOGI(TAG, "REST server started on port %d", CONFIG_TQ_HTTP_PORT);
return ESP_OK;
}
void rest_server_stop(void) {
if (s_server != NULL) {
httpd_stop(s_server);
s_server = NULL;
}
}