From ff0e21d259e5b23b0c1926593492d1d9dce4146c Mon Sep 17 00:00:00 2001 From: xue <2144439972@qq.com> Date: Sat, 27 Dec 2025 10:07:25 +0800 Subject: [PATCH] =?utf8?q?=E5=A2=9E=E5=8A=A0=E5=AF=B9=E8=AF=9D=E8=BF=87?= =?utf8?q?=E7=A8=8B=E4=B8=AD=E5=88=87=E6=8D=A2=E8=A1=A8=E6=83=85=E7=9A=84A?= =?utf8?q?T?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../zhihui/leiniao/imsl_ln/leiniao_api_at.c | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/code/sdk/zhihui/leiniao/imsl_ln/leiniao_api_at.c b/code/sdk/zhihui/leiniao/imsl_ln/leiniao_api_at.c index 4958bfc7c..1665de9b1 100644 --- a/code/sdk/zhihui/leiniao/imsl_ln/leiniao_api_at.c +++ b/code/sdk/zhihui/leiniao/imsl_ln/leiniao_api_at.c @@ -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"}, -- 2.17.1