增加对话过程中切换表情的AT 2983/1 2983/head 2984/target/1
authorxue <2144439972@qq.com>
Sat, 27 Dec 2025 02:07:25 +0000 (10:07 +0800)
committerxue <2144439972@qq.com>
Sat, 27 Dec 2025 02:07:25 +0000 (10:07 +0800)
code/sdk/zhihui/leiniao/imsl_ln/leiniao_api_at.c

index 4958bfc..1665de9 100644 (file)
@@ -32,6 +32,7 @@
 static uint32_t ln_conversation_flag_at(uint8_t *para, uint32_t paraLen, char *strCommonCmd);
 static uint32_t ln_push_text_at(uint8_t *para, uint32_t paraLen, char *strCommonCmd);
 static uint32_t ln_timeline_status_change_at(uint8_t *para, uint32_t paraLen, char *strCommonCmd);
+static uint32_t ln_npc_emotion_change_at(uint8_t *para, uint32_t paraLen, char *strCommonCmd);
 
 //恢复出厂设置相关AT命令函数声明
 static uint32_t ln_factory_at(uint8_t *para, uint32_t paraLen, char *strCommonCmd);
@@ -841,6 +842,57 @@ static uint32_t ln_timeline_status_change_at(uint8_t *para, uint32_t paraLen, ch
     return ERRCODE_SUCC;
 }
 
+/**
+ * @brief 推送NPC表情变化通知的AT命令
+ * @param para 参数字符串
+ * @param paraLen 参数长度  
+ * @param strCommonCmd 命令字符串
+ * @return 错误码
+ * 
+ * 用法: AT^LN_NPC_EMOTION_CHANGE=emotion
+ *      AT^LN_NPC_EMOTION_CHANGE=happy
+ *      AT^LN_NPC_EMOTION_CHANGE=sad
+ */
+static uint32_t ln_npc_emotion_change_at(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
+{
+    LN_UNUSED(strCommonCmd);
+    
+    uint8_t argv[LN_MAX_ARGC][LN_MAX_ARGV_LEN] = {0};
+    uint32_t argc = 0;
+    
+    // 解析参数
+    if (ConvertCmdToParam(para, paraLen, argv, &argc) != LN_SUCCESS) {
+        printf("ERROR: Failed to parse parameters\n");
+        return ERRCODE_FAIL;
+    }
+
+    if (argc < 1) {
+        printf("ERROR: Missing emotion parameter\n");
+        printf("Usage: AT^LN_NPC_EMOTION_CHANGE=emotion\n");
+        printf("Example: AT^LN_NPC_EMOTION_CHANGE=happy\n");
+        return ERRCODE_FAIL;
+    }
+
+    const char *emotion = (char*)argv[0];
+    if (emotion == NULL || strlen(emotion) == 0) {
+        printf("ERROR: Empty emotion parameter\n");
+        return ERRCODE_FAIL;
+    }
+
+    // 检查参数长度限制
+    if (strlen(emotion) > 256) {
+        printf("ERROR: Emotion too long (max 256 characters)\n");
+        return ERRCODE_FAIL;
+    }
+
+    // 推送NPC表情变化通知
+    push_npc_emotion_change_notification(emotion);
+    printf("+LN_NPC_EMOTION_CHANGE: OK\n");
+    printf("NPC emotion changed to: %s\n", emotion);
+    
+    return ERRCODE_SUCC;
+}
+
 /* 恢复出厂设置: AT^LN_FACTORY */
 static uint32_t ln_factory_at(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
 {
@@ -1908,6 +1960,7 @@ static const at_cmd_table_t g_ln_api_cmd[] = {
     /* 对话控制 */
     {(char *)"AT^LN_CONV_FLAG", ln_conversation_flag_at, (char *)"设置对话标志: AT^LN_CONV_FLAG=1/0"},
     {(char *)"AT^LN_PUSH_TEXT", ln_push_text_at, (char *)"推送文本到UI: AT^LN_PUSH_TEXT=hello world"},
+    {(char *)"AT^LN_NPC_EMOTION_CHANGE", ln_npc_emotion_change_at, (char *)"推送NPC表情变化: AT^LN_NPC_EMOTION_CHANGE=emotion"},
     
     //恢复出厂设置
     {(char *)"AT^LN_FACTORY", ln_factory_at, (char *)"恢复出厂设置: AT^LN_FACTORY"},