From 17ac2ce0ed52874616c79c910667e41e34604826 Mon Sep 17 00:00:00 2001
From: wangzhibo <wangzhibo@shsening.com>
Date: 星期一, 31 八月 2026 13:14:12 +0800
Subject: [PATCH] add translation app
---
xiaozhi-esp32-2.2.6/main/boards/sening-xiaozhi-s3/mqtt.c | 47 +++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 45 insertions(+), 2 deletions(-)
diff --git a/xiaozhi-esp32-2.2.6/main/boards/sening-xiaozhi-s3/mqtt.c b/xiaozhi-esp32-2.2.6/main/boards/sening-xiaozhi-s3/mqtt.c
index fce4e82..219255b 100644
--- a/xiaozhi-esp32-2.2.6/main/boards/sening-xiaozhi-s3/mqtt.c
+++ b/xiaozhi-esp32-2.2.6/main/boards/sening-xiaozhi-s3/mqtt.c
@@ -15,6 +15,7 @@
#include "freertos/task.h"
#include "mqtt_client.h"
#include "system.h"
+#include "app_task.h"
#define BOARD_MQTT_KEEPALIVE_SEC 120
#define BOARD_MQTT_STATE_REPORT_INTERVAL_MS 5000
@@ -1222,8 +1223,20 @@
}
esp_err_t err = DS2312_Set_Alarm_Id_Saved(id->valuestring, hour, minute, second, repeat_mask);
- return err == ESP_OK ? BoardMqtt_ResultOk("alarm updated") :
- BoardMqtt_ResultFail(BOARD_MQTT_ERR_EXEC_FAILED, esp_err_to_name(err));
+ if (err != ESP_OK) {
+ return BoardMqtt_ResultFail(BOARD_MQTT_ERR_EXEC_FAILED, esp_err_to_name(err));
+ }
+
+ cJSON *app_id = cJSON_GetObjectItem(payload, "app_id");
+ cJSON *task_id = cJSON_GetObjectItem(payload, "task_id");
+ if (cJSON_IsString(app_id) && app_id->valuestring && app_id->valuestring[0]) {
+ const char *tid = (cJSON_IsString(task_id) && task_id->valuestring) ? task_id->valuestring : "";
+ cJSON *params = cJSON_GetObjectItem(payload, "params");
+ char *params_json = params ? cJSON_PrintUnformatted(params) : NULL;
+ Board_SavePendingTask(app_id->valuestring, tid, params_json, "schedule", id->valuestring);
+ free(params_json);
+ }
+ return BoardMqtt_ResultOk("alarm updated");
}
static board_mqtt_action_result_t BoardMqtt_HandleUnsetAlarm(cJSON *payload)
@@ -1852,6 +1865,35 @@
return BoardMqtt_ResultOk("manifest accepted");
}
+static board_mqtt_action_result_t BoardMqtt_HandleStartAppTask(cJSON *payload)
+{
+ if (!payload) {
+ return BoardMqtt_ResultFail(BOARD_MQTT_ERR_INVALID_PARAM, "missing payload");
+ }
+ cJSON *app_id = cJSON_GetObjectItem(payload, "app_id");
+ cJSON *task_id = cJSON_GetObjectItem(payload, "task_id");
+ cJSON *source = cJSON_GetObjectItem(payload, "source");
+ cJSON *params = cJSON_GetObjectItem(payload, "params");
+ if (!cJSON_IsString(app_id) || !app_id->valuestring || app_id->valuestring[0] == '\0') {
+ return BoardMqtt_ResultFail(BOARD_MQTT_ERR_INVALID_PARAM, "missing app_id");
+ }
+ const char *tid = (cJSON_IsString(task_id) && task_id->valuestring) ? task_id->valuestring : "";
+ const char *src = (cJSON_IsString(source) && source->valuestring) ? source->valuestring : "mqtt_immediate";
+ char *params_json = params ? cJSON_PrintUnformatted(params) : NULL;
+ esp_err_t err = Board_StartAppTask(app_id->valuestring, tid, params_json, src);
+ free(params_json);
+ if (err == ESP_ERR_NOT_FOUND) {
+ return BoardMqtt_ResultFail(BOARD_MQTT_ERR_NOT_FOUND, "unknown app or task");
+ }
+ if (err == ESP_ERR_INVALID_STATE) {
+ return BoardMqtt_ResultFail(BOARD_MQTT_ERR_BUSY, "preempted by higher priority task");
+ }
+ if (err != ESP_OK) {
+ return BoardMqtt_ResultFail(BOARD_MQTT_ERR_EXEC_FAILED, esp_err_to_name(err));
+ }
+ return BoardMqtt_ResultOk("app task started");
+}
+
static board_mqtt_action_result_t BoardMqtt_DispatchAction(const char *req_id, const char *action, cJSON *payload)
{
if (strcmp(action, "SET_VOLUME") == 0) return BoardMqtt_HandleSetVolume(payload);
@@ -1866,6 +1908,7 @@
if (strcmp(action, "UPDATE_MANIFEST") == 0 || strcmp(action, "SYNC_COURSE_TASK") == 0) return BoardMqtt_HandleUpdateManifest(req_id, payload);
if (strcmp(action, "DOWNLOAD") == 0) return BoardMqtt_HandleDownload(req_id, payload);
if (strcmp(action, "OTA_UPDATE") == 0) return BoardMqtt_HandleOtaUpdate(req_id, payload);
+ if (strcmp(action, "START_APP_TASK") == 0) return BoardMqtt_HandleStartAppTask(payload);
return BoardMqtt_ResultFail(BOARD_MQTT_ERR_UNSUPPORTED, "unsupported action");
}
--
Gitblit v1.9.1