#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; } }