中间版本
authorhcj <1224667075@qq.com>
Mon, 25 Aug 2025 04:26:04 +0000 (12:26 +0800)
committerhcj <1224667075@qq.com>
Mon, 25 Aug 2025 04:26:04 +0000 (12:26 +0800)
34 files changed:
code/sdk/application/brandy/brandy_standard/thread_pri_init.c
code/sdk/build/config/target_config/brandy/config.py
code/sdk/zhihui/AI/AIagent/CMakeLists.txt [new file with mode: 0644]
code/sdk/zhihui/AI/AIagent/include/agent.h [moved from code/sdk/zhihui/AI/agent/include/agent.h with 100% similarity]
code/sdk/zhihui/AI/AIagent/src/agent.c [moved from code/sdk/zhihui/AI/agent/src/agent.c with 97% similarity]
code/sdk/zhihui/AI/AImain/AI_mian.c [new file with mode: 0644]
code/sdk/zhihui/AI/AImain/CMakeLists.txt [new file with mode: 0644]
code/sdk/zhihui/AI/AImain/uapi_ai_function.h [new file with mode: 0644]
code/sdk/zhihui/AI/AIota/CMakeLists.txt [new file with mode: 0644]
code/sdk/zhihui/AI/AIota/include/ota.h [moved from code/sdk/zhihui/AI/ota/include/ota.h with 100% similarity]
code/sdk/zhihui/AI/AIota/src/ota.c [moved from code/sdk/zhihui/AI/ota/src/ota.c with 100% similarity]
code/sdk/zhihui/AI/AIsdk/CMakeLists.txt [new file with mode: 0644]
code/sdk/zhihui/AI/AIsdk/include/main_include.h [new file with mode: 0644]
code/sdk/zhihui/AI/AIsdk/include/zj_aiagent.h [new file with mode: 0644]
code/sdk/zhihui/AI/AIsdk/include/zj_err.h [new file with mode: 0644]
code/sdk/zhihui/AI/AIsdk/include/zj_log.h [new file with mode: 0644]
code/sdk/zhihui/AI/AIsdk/include/zj_network.h [new file with mode: 0644]
code/sdk/zhihui/AI/AIsdk/include/zj_ota.h [new file with mode: 0644]
code/sdk/zhihui/AI/AIsdk/include/zj_system.h [new file with mode: 0644]
code/sdk/zhihui/AI/AIsdk/include/zj_type.h [new file with mode: 0644]
code/sdk/zhihui/AI/AIsdk/lib/libcommon.a [new file with mode: 0644]
code/sdk/zhihui/AI/AIsdk/lib/libcos.a [new file with mode: 0644]
code/sdk/zhihui/AI/AIsdk/lib/libthirdparty.a [new file with mode: 0644]
code/sdk/zhihui/AI/AIsyscall/CMakeLists.txt [new file with mode: 0644]
code/sdk/zhihui/AI/AIsyscall/include/syscall.h [moved from code/sdk/zhihui/AI/syscall/include/syscall.h with 100% similarity]
code/sdk/zhihui/AI/AIsyscall/src/syscall.c [moved from code/sdk/zhihui/AI/syscall/src/syscall.c with 99% similarity]
code/sdk/zhihui/AI/AIsystem/CMakeLists.txt [new file with mode: 0644]
code/sdk/zhihui/AI/AIsystem/include/system.h [moved from code/sdk/zhihui/AI/system/include/system.h with 82% similarity]
code/sdk/zhihui/AI/AIsystem/src/system.c [moved from code/sdk/zhihui/AI/system/src/system.c with 100% similarity]
code/sdk/zhihui/AI/CMakeLists.txt [new file with mode: 0644]
code/sdk/zhihui/CMakeLists.txt
code/sdk/zhihui/services/ble_service/blemoder/bleInstruct.h
code/sdk/zhihui/utils/CMakeLists.txt
code/sdk/zhihui/utils/custom_utils_at_cmd.c

index ce6996b..c1fd487 100644 (file)
@@ -555,9 +555,11 @@ static void thread_main(const void *unused)
 \r
     /*启动蓝牙ble服务,cywee有重置 mac地址的操作,会需要把 蓝牙服务开启放在cywee服务之后*/\r
 #ifdef CUSTOM_UTILS\r
-    \r
+   start_custom_ble_service();\r
 #endif\r
-start_custom_ble_service();\r
+\r
+\r
+\r
 #ifdef SUPPORT_ALIPAY_SEC\r
 #if !defined(A5133_DEMO_SERVER) && !defined(A5133_DEMO_CLIENT)\r
     uapi_alipay_svr_init();\r
index f2cbfba..4de5bef 100644 (file)
@@ -395,6 +395,7 @@ target = {
             'SUPPORT_CYWEE_SERVICE',
             'SUPPORT_BATTERY_SERVICE',
             'FD230',
+            'SUPPORT_AT_OHOSFWK',
             # 'SUPPORT_AUTO_OTA_SERVER',
             # 'CONFIG_DFX_SUPPORT_DIAG_UP_MACHINE=1',
             #"MEM_CHECK",
@@ -437,6 +438,12 @@ target = {
                             "ppg_service",
                             "cywee_service",
                            "batterry_service",
+                           "AIsystem",
+                           "AImain",
+                        #    "AIsyscall",
+                           "AIagent",
+                           "AIota",
+                           "AIsdk",
                            "bleservice",
                            "blemoder",
                            "transspecard",
diff --git a/code/sdk/zhihui/AI/AIagent/CMakeLists.txt b/code/sdk/zhihui/AI/AIagent/CMakeLists.txt
new file mode 100644 (file)
index 0000000..eb73e59
--- /dev/null
@@ -0,0 +1,82 @@
+#===============================================================================
+# @brief    cmake file
+# Copyright (c) @CompanyNameMagicTag 2022-2023. All rights reserved.
+#===============================================================================
+set(COMPONENT_NAME "AIagent")
+
+set(SOURCES
+    ${CMAKE_CURRENT_SOURCE_DIR}/src/agent.c
+)
+
+set(PUBLIC_HEADER
+    ${CMAKE_CURRENT_SOURCE_DIR}/include
+    ${CMAKE_CURRENT_SOURCE_DIR}/..
+    ${CMAKE_CURRENT_SOURCE_DIR}/../AIsdk/include
+)
+set(PRIVATE_HEADER
+    ${ROOT_DIR}/open_source/openharmony/drivers/peripheral/display/interfaces/include
+    ${ROOT_DIR}/middleware/utils/update/inner_include
+    ${ROOT_DIR}/middleware/services/gui/uikit/utils/interfaces/kits
+    ${ROOT_DIR}/middleware/services/gui/uikit/utils/interfaces/innerkits
+    ${ROOT_DIR}/middleware/services/gui/uikit/proprietary/include
+    ${ROOT_DIR}/middleware/services/gui/uikit/ui/interfaces/innerkits
+    ${ROOT_DIR}/open_source/openharmony/utils/native/lite/include
+    ${ROOT_DIR}/middleware/services/gui/uikit/surface/interfaces/kits
+    ${ROOT_DIR}/open_source/openharmony/utils/native/lite/kv_store/innerkits
+    ${ROOT_DIR}/middleware/services/gui/uikit/utils/interfaces/kits/gfx_utils
+    ${ROOT_DIR}/middleware/services/media/foundation/player/interfaces/kits
+    ${ROOT_DIR}/application/wearable/nativeapp/nativeui/key/include
+    ${ROOT_DIR}/middleware/services/gui/uikit/ui/interfaces/innerkits
+    ${ROOT_DIR}/middleware/services/gui/uikit/ui/interfaces/innerkits/font
+    ${ROOT_DIR}/middleware/services/gui/uikit/ui/frameworks/font
+    ${ROOT_DIR}/middleware/services/gui/uikit/ui/frameworks
+   
+    ${ROOT_DIR}/middleware/services/gui/uikit/proprietary/src/utils/innerkits
+    ${ROOT_DIR}/zhihui/services/factorytest_service
+    ${ROOT_DIR}/zhihui/drivers/
+    ${ROOT_DIR}/zhihui/4g/cat1Service/include
+    ${ROOT_DIR}/open_source/openharmony/third_party/lwip/lwip_v2.1.3/src/include
+    ${ROOT_DIR}/open_source/openharmony/third_party/lwip/lwip_adapter/liteos/src/include
+    # /home/hcj/615/FD230/code/sdk/application/wearable/nativeapp/nativeui/player/include/PlayersPresenter.h
+    # /home/hcj/615/FD230/code/sdk/middleware/services/gui/uikit/ui/frameworks/font/glyphs_manager.h
+    # /home/hcj/615/FD230/code/sdk//UiServersMsg.h
+)
+# /home/hcj/615/FD230/code/sdk/
+
+
+set(PRIVATE_DEFINES
+    TARGET_NAME="${TARGET_COMMAND}"
+    BUILD_TIME="${BUILD_TIME}"
+)
+
+set(PUBLIC_DEFINES
+)
+
+# use this when you want to add ccflags like -include xxx
+set(COMPONENT_PUBLIC_CCFLAGS
+)
+
+set(COMPONENT_CCFLAGS
+    -Wno-error
+    -Wno-unused-parameter
+    -fno-exceptions
+    -fno-unwind-tables
+    -fno-asynchronous-unwind-tables
+    -Wno-undef
+    -Wno-bitwise-op-parentheses
+    -Wno-shift-op-parentheses
+    -nostdlibinc
+    -nostdinc
+    -nostdlib
+    -Wno-c++11-narrowing
+    -Wno-error=unused-function
+)
+set(WHOLE_LINK
+    true
+)
+
+set(MAIN_COMPONENT
+    false
+)
+
+build_component()
similarity index 97%
rename from code/sdk/zhihui/AI/agent/src/agent.c
rename to code/sdk/zhihui/AI/AIagent/src/agent.c
index 90b3d43..ba19714 100644 (file)
@@ -223,14 +223,14 @@ static int agent_text_data_cb(unsigned int uiReqID, unsigned char* pucTextBuff,
 
 static FILE* fp = NULL;
 static unsigned int uiAudioDataLen = 0;
-static int agent_audio_data_cb(unsigned int uiReqID, unsigned char *pucPackage,unsigned int uiPacklen, int bFinished, int iRspCode)
+int agent_audio_data_cb(unsigned int uiReqID, unsigned char *pucPackage,unsigned int uiPacklen, int bFinished, int iRspCode)
 {
        if (iRspCode != 0)      return -1;
        //printf("reqID %u audio len %d bFinished %d Rsp %d \n", uiReqID, uiPacklen, bFinished, iRspCode);
        uiAudioDataLen += uiPacklen;
        if (fp == NULL)
        {
-               if (_access("D:/SDK/truck-agent/Demo/resources/answer.pcm", 0) == 0)
+               if (access("D:/SDK/truck-agent/Demo/resources/answer.pcm", 0) == 0)
                {
                        remove("D:/SDK/truck-agent/Demo/resources/answer.pcm");
                }
diff --git a/code/sdk/zhihui/AI/AImain/AI_mian.c b/code/sdk/zhihui/AI/AImain/AI_mian.c
new file mode 100644 (file)
index 0000000..33bc02e
--- /dev/null
@@ -0,0 +1,376 @@
+#include "main_include.h"
+#include "uapi_ai_function.h"
+
+/*******************************************************************************************************/
+#define SYSTEM_PATH            "/user/userdata/System"
+#define CONFIG_PATH            "/user/userdata/Config"
+#define LOG_PATH               "/user/userdata/Log"
+
+static int create_new_session_rsp_cb(int iReqId, unsigned char* pucSessionID, int iRspCode);
+
+/***********************************************************
+ * 工作路径创建
+***********************************************************/ 
+static int directory_exists(const char* path) 
+{
+       return access(path, 0);
+}
+
+static void make_path(void)
+{
+       char command[256] = { 0 };
+       if (directory_exists(SYSTEM_PATH) != 0)
+       {
+               snprintf(command, sizeof(command), "mkdir -p \"%s\"", SYSTEM_PATH);
+               system(command);
+       }
+       if (directory_exists(CONFIG_PATH) != 0)
+       {
+               snprintf(command, sizeof(command), "mkdir -p \"%s\"", CONFIG_PATH);
+               system(command);
+       }
+       if (directory_exists(LOG_PATH) != 0)
+       {
+               snprintf(command, sizeof(command), "mkdir -p \"%s\"", LOG_PATH);
+               system(command);
+       }
+       return;
+}
+
+/***********************************************************
+ * 智能体服务状态通知
+***********************************************************/
+static int agent_status_cb(int iAgentStatus)
+{
+    agent_getInfo()->agent_status = iAgentStatus;
+    if (iAgentStatus == 1)
+    {
+        // 获取智能体列表
+        agent_getInfo()->need_get_agent_list = 1;
+    }
+    printf("recv agent server status [%d]\n", iAgentStatus);
+    return 0;
+}
+
+/***********************************************************
+ * 图片上传回调
+***********************************************************/
+static int agent_upload_pic_cb(int iReqId, int iCode, unsigned char *pucFileID)
+{
+    if(iCode != 0)  return -1;
+    printf("recv upload pic fileID [%s]\n",pucFileID);
+    strcpy(agent_getInfo()->agent_file_id, pucFileID);
+    agent_getInfo()->need_send_pic_ques = 1;
+    return 0;
+}
+
+static void demo_page1()
+{
+    printf(
+        "-----> a.创建会话\n"
+        "-----> 0.中断会话 \n"
+        "-----> 1.文本提问 \n"
+        "-----> 2.图片上传 + 图片提问 智能体平台暂不支持 \n"
+        "-----> 3.语音提问 \n"
+        "-----> 4.获取历史会话条目 \n"
+        "-----> 5.删除会话轮次记录\n"
+        "-----> 6.获取下一轮次建议问题列表 \n"
+        "-----> 7.重命名会话轮次 \n"
+        "-----> 8.获取应用meta信息 \n"
+        "-----> 请输入: "
+    );
+    return;
+}
+
+/***********************************************************
+ * 停止会话 回调
+***********************************************************/
+static int agent_interrupt_session_rsp_cb(int iReqId, int iRspCode)
+{
+    printf("interrupt session %s rsp %d \n", agent_getInfo()->agent_session_id, iRspCode);
+
+    //ZJ_CancelDownloadTask(agent_getInfo()->download_text_reqId);
+    ZJ_CancelDownloadTask(agent_getInfo()->download_audio_reqId);
+
+    agent_getInfo()->need_show_page1 = 1;
+    memset(agent_getInfo()->agent_session_id, 0, sizeof(agent_getInfo()->agent_session_id));
+    return 0;
+}
+
+
+/***********************************************************
+ * 获取历史会话条目 回调
+***********************************************************/
+static int agent_get_retrieve_chat_history_cb(int iReqId, ST_ZJ_HistoryChat* pstHistoryChatList, int iRspCode)
+{
+    ST_ZJ_HistoryChat* pstTmpNode = NULL;
+    do
+    {
+        if (iRspCode != 0)     return -1;
+        while (pstHistoryChatList)
+        {
+            pstTmpNode = pstHistoryChatList;
+            pstHistoryChatList = pstHistoryChatList->pstNext;
+
+            printf("/*******************agent_get_retrieve_chat_history_cb*******************/\n");
+            printf("TurnID:\t%s\n", pstTmpNode->aucTurnID);
+            printf("Prompt:\t%s\n", pstTmpNode->pucPrompt);
+            printf("ContentUrl:\t%s\n", pstTmpNode->aucContentUrl);
+            printf("AudioUrl:\t%s\n", pstTmpNode->aucAudioUrl);
+            printf("PictureUrl:\t%s\n", pstTmpNode->aucPictureUrl);
+        }
+    } while (0);
+    agent_getInfo()->need_show_page1 = 1;
+    return 0;
+}
+
+int agent_delete_session_round_cb(unsigned int uiReqID, int iRsp)
+{
+    printf("reqid %u recv delete session round response code %d \n", uiReqID, iRsp);
+    agent_getInfo()->need_show_page1 = 1;
+    return 0;
+}
+
+int agent_get_suggest_ques_list_cb(unsigned int uiReqID, ST_ZJ_QUES_ITEM* pstList)
+{
+    ST_ZJ_QUES_ITEM* pstTmpNode = pstList;
+
+    while (pstTmpNode)
+    {
+        printf("recv suggest ques [ %s ] \n", pstTmpNode->pucQuestion);
+        pstTmpNode = pstTmpNode->pstNext;
+    }
+    agent_getInfo()->need_show_page1 = 1;
+    return 0;
+}
+
+int agent_rename_session_round_cb(unsigned int uiReqID, int iRsp)
+{
+    printf("reqID %u recv rename session round response code %d \n", uiReqID, iRsp);
+    agent_getInfo()->need_show_page1 = 1;
+    return 0;
+}
+
+int agent_get_session_meta_cb(unsigned int uiReqID, int iRsp, unsigned char* pucDalle2, unsigned char* pucBackGround, unsigned char* pucContent)
+{
+    if (iRsp != 0)
+    {
+        printf("reqID %u recv get session meta rsp code %d \n", uiReqID, iRsp);
+    }
+    else
+    {
+        printf("reqID %u recv get session meta rsp dalle2 %s background %s content %s \n", uiReqID, pucDalle2, pucBackGround, pucContent);
+    }
+    agent_getInfo()->need_show_page1 = 1;
+    return 0;
+}
+
+/***********************************************************
+ * 模拟提流程 线程
+***********************************************************/
+static void* question_task_loop(void* arg)
+{
+    static int iQuesIndex = 0;
+    unsigned char aucQues[][128] = {
+        "1+1=?",
+        "What is the weather like in the United States?",
+        "Is Taiwan China's?",
+        "What is Apple?",
+        "我父亲今年70岁了,有些骨质疏松,吃哪些药会有效果?"
+    };
+    unsigned char aucBanGongQues[][128] = {
+        "What are the commonly used office software? ? ",
+        "What was my last question? ?",
+        "How to use wps ?"
+    };
+    unsigned char ucInput = 0;
+    unsigned char aucAudioPacket[6400];
+    unsigned char* pucPicBuff = NULL;
+    unsigned int uiBuffSize = 0;
+    while (system_getInfo()->uiDemoRunFlag == 1)
+    {
+        if (agent_getInfo()->need_show_page1)
+        {
+            demo_page1();
+            scanf("%c", &ucInput);
+            agent_getInfo()->need_show_page1 = 0;
+
+            switch (ucInput)
+            {
+            case 'a':
+            {
+                unsigned int ucAgentID = 0;
+                printf("***** 请输入Agent ID: ");
+                scanf("%u", &ucAgentID);
+                ZJ_CreateNewSession(ZJ_GetOneReqId(), ucAgentID, create_new_session_rsp_cb);
+                break;
+            }
+            case '0':   // 中断会话轮次
+            {
+                ZJ_InterruptSession(ZJ_GetOneReqId(), agent_getInfo()->agent_session_id, agent_getInfo()->turn_id, agent_interrupt_session_rsp_cb);
+                break;
+            }
+            case '1':   // 文本提问
+            {
+                static int index = 0;
+                //ZJ_SendQuestionToAIAgent(0, agent_getInfo()->agent_session_id, agent_getInfo()->turn_id, (unsigned char*)"1+1=?", NULL);
+                //ZJ_SendQuestionToAIAgent(0, agent_getInfo()->agent_session_id, agent_getInfo()->turn_id, (unsigned char*)aucBanGongQues[index++ % 5], NULL);
+                //ZJ_SendQuestionToAIAgent(0, agent_getInfo()->agent_session_id, agent_getInfo()->turn_id, (unsigned char*)"我父亲今年70岁了,有些骨质疏松,吃哪些药会有效果 ? ", NULL);
+                ZJ_SendQuestionToAIAgent(0, agent_getInfo()->agent_session_id, agent_getInfo()->turn_id, (unsigned char*)"My father is 70 years old and has osteoporosis. What medicines will be effective?", NULL);
+                break;
+            }
+            case '2':
+            {
+                FILE* fp = fopen("../resources/test.jpg", "rb");
+         
+                if (fp == NULL)
+                {
+                    printf("open file err \n");
+                    break;
+                }
+                fseek(fp, 0, SEEK_END);
+                uiBuffSize = ftell(fp);
+                pucPicBuff = (unsigned char*)malloc(uiBuffSize);
+                fseek(fp, 0, SEEK_SET);
+                fread(pucPicBuff, 1, uiBuffSize, fp);
+
+                ZJ_UploadPicture(ZJ_GetOneReqId(), (unsigned char*)"test.jpg", pucPicBuff, uiBuffSize, agent_upload_pic_cb);
+
+                fclose(fp);
+                free(pucPicBuff);
+                break;
+            }
+            case '3':   // 语音提问
+            {
+                int iReadLen = 0;
+                FILE* fp = fopen("../resources/test.wav", "rb");
+          
+                if (fp == NULL)
+                {
+                    printf("open file err %d \n", errno);
+                    break;
+                }
+                fseek(fp, 0, SEEK_END);
+                int iSize = ftell(fp);
+                fseek(fp, 0, SEEK_SET);
+                int num_chunks = iSize / 6400;
+                int remain = iSize % 6400;
+                int bytes_read = 0;
+
+                ZJ_SendVoiceDataToAIAgent(NULL, 0, 0);
+                while (bytes_read < iSize)
+                {
+                    //static int iFirst = 1;
+                    //static int iTest = 1;
+                    //int iRecStatus = 0;
+
+                    int read_size = (num_chunks > 0) ? 6400 : remain;
+                    
+                    iReadLen = fread(aucAudioPacket, 1, read_size, fp);
+                    num_chunks--;
+                    bytes_read += iReadLen;
+                    ZJ_SendVoiceDataToAIAgent(aucAudioPacket, iReadLen, 1);
+                    Sleep(200); // 模拟单声道 采样率16000 每帧6400字节 = 200ms时长
+                }
+                ZJ_SendVoiceDataToAIAgent(NULL, 0, 2);
+                fclose(fp);
+                break;
+            }
+            case '4':   // 获取会话历史条目内容
+            {
+                ZJ_GetRetrieveChatHistory(ZJ_GetOneReqId(), (unsigned char*)agent_getInfo()->agent_session_id, agent_get_retrieve_chat_history_cb);
+                break;
+            }
+            case '5':   // 删除会话轮次记录
+            {
+                ZJ_DeleteSessionRound(ZJ_GetOneReqId(), (unsigned char*)agent_getInfo()->agent_session_id, (unsigned char*)agent_getInfo()->turn_id, agent_delete_session_round_cb);
+                break;
+            }
+            case '6':   // 获取下一轮次建议问题列表
+            {
+                ZJ_GetSuggestQuesList(ZJ_GetOneReqId(), (unsigned char*)agent_getInfo()->agent_session_id, (unsigned char*)agent_getInfo()->turn_id, agent_get_suggest_ques_list_cb);
+                break;
+            }
+            case '7':   // 重命名会话轮次
+            {
+                ZJ_RenameSessionRound(ZJ_GetOneReqId(), (unsigned char*)agent_getInfo()->agent_session_id, (unsigned char*)agent_getInfo()->turn_id, (unsigned char *)"test_name", agent_rename_session_round_cb);
+                break;
+            }
+            case '8':   // 获取应用meta信息
+            {
+                ZJ_GetSessionMetaInfo(ZJ_GetOneReqId(), (unsigned char*)agent_getInfo()->agent_session_id, agent_get_session_meta_cb);
+                break;
+            }
+            case '9':
+            {
+                system_getInfo()->uiDemoRunFlag = 0;
+                break;
+            }
+            default:
+                agent_getInfo()->need_show_page1 = 1;
+                break;
+            }
+        }
+
+        if (agent_getInfo()->need_send_pic_ques)
+        {
+            ST_ZJ_FILEIDLIST* pstFileIDList = (ST_ZJ_FILEIDLIST*)malloc(sizeof(ST_ZJ_FILEIDLIST));
+            pstFileIDList->pstFileID = (unsigned char*)malloc(256);
+            memset(pstFileIDList->pstFileID, 0, 256);
+            strcpy(pstFileIDList->pstFileID, agent_getInfo()->agent_file_id);
+            ZJ_SendQuestionToAIAgent(1, agent_getInfo()->agent_session_id, agent_getInfo()->turn_id, (unsigned char*)"xxxxxxxxxxxxxxxx", pstFileIDList);
+
+            free(pstFileIDList->pstFileID);
+            pstFileIDList->pstFileID = NULL;
+            free(pstFileIDList);
+            pstFileIDList = NULL;
+            agent_getInfo()->need_send_pic_ques = 0;
+        }
+
+        if (agent_getInfo()->need_send_voice_ques)
+        {
+            printf("tras text - %s \n", agent_getInfo()->aucTrasText);
+            ZJ_SendQuestionToAIAgent(0, agent_getInfo()->agent_session_id, agent_getInfo()->turn_id, (unsigned char*)agent_getInfo()->aucTrasText, NULL);
+            agent_getInfo()->need_send_voice_ques = 0;
+        }
+    }
+
+    return NULL;
+}
+
+/***********************************************************
+ * 创建新会话回调
+***********************************************************/
+static int create_new_session_rsp_cb(int iReqId, unsigned char* pucSessionID, int iRspCode)
+{
+    if (iRspCode != 0)   return -1;
+    memset(agent_getInfo()->agent_session_id, 0, sizeof(agent_getInfo()->agent_session_id));
+    strncpy(agent_getInfo()->agent_session_id, pucSessionID, sizeof(agent_getInfo()->agent_session_id) - 1);
+    // 新会话创建成功后重置轮次ID
+    memset(agent_getInfo()->turn_id, 0, sizeof(agent_getInfo()->turn_id));
+    agent_getInfo()->need_show_page1 = 1;
+    printf("recv create new session [%s] \n", pucSessionID);
+
+    return 0;
+}
+
+void uapi_CT_ai_init(void)
+{
+    make_path();
+
+    // syscall_init();
+    ZJ_InitEx(SYSTEM_PATH, CONFIG_PATH, LOG_PATH);
+       system_init();
+    ota_init();
+
+       agent_init();
+    
+       system_start();
+    ota_start();
+       agent_start();
+       ZJ_Start();
+
+    // Sleep(3000);
+
+}
+
diff --git a/code/sdk/zhihui/AI/AImain/CMakeLists.txt b/code/sdk/zhihui/AI/AImain/CMakeLists.txt
new file mode 100644 (file)
index 0000000..7c3bd9e
--- /dev/null
@@ -0,0 +1,81 @@
+#===============================================================================
+# @brief    cmake file
+# Copyright (c) @CompanyNameMagicTag 2022-2023. All rights reserved.
+#===============================================================================
+set(COMPONENT_NAME "AImain")
+
+set(SOURCES
+    ${CMAKE_CURRENT_SOURCE_DIR}/AI_mian.c
+)
+
+set(PUBLIC_HEADER
+    ${CMAKE_CURRENT_SOURCE_DIR}/../AIsdk/include
+    ${CMAKE_CURRENT_SOURCE_DIR}
+)
+set(PRIVATE_HEADER
+    ${ROOT_DIR}/open_source/openharmony/drivers/peripheral/display/interfaces/include
+    ${ROOT_DIR}/middleware/utils/update/inner_include
+    ${ROOT_DIR}/middleware/services/gui/uikit/utils/interfaces/kits
+    ${ROOT_DIR}/middleware/services/gui/uikit/utils/interfaces/innerkits
+    ${ROOT_DIR}/middleware/services/gui/uikit/proprietary/include
+    ${ROOT_DIR}/middleware/services/gui/uikit/ui/interfaces/innerkits
+    ${ROOT_DIR}/open_source/openharmony/utils/native/lite/include
+    ${ROOT_DIR}/middleware/services/gui/uikit/surface/interfaces/kits
+    ${ROOT_DIR}/open_source/openharmony/utils/native/lite/kv_store/innerkits
+    ${ROOT_DIR}/middleware/services/gui/uikit/utils/interfaces/kits/gfx_utils
+    ${ROOT_DIR}/middleware/services/media/foundation/player/interfaces/kits
+    ${ROOT_DIR}/application/wearable/nativeapp/nativeui/key/include
+    ${ROOT_DIR}/middleware/services/gui/uikit/ui/interfaces/innerkits
+    ${ROOT_DIR}/middleware/services/gui/uikit/ui/interfaces/innerkits/font
+    ${ROOT_DIR}/middleware/services/gui/uikit/ui/frameworks/font
+    ${ROOT_DIR}/middleware/services/gui/uikit/ui/frameworks
+   
+    ${ROOT_DIR}/middleware/services/gui/uikit/proprietary/src/utils/innerkits
+    ${ROOT_DIR}/zhihui/services/factorytest_service
+    ${ROOT_DIR}/zhihui/drivers/
+    ${ROOT_DIR}/zhihui/4g/cat1Service/include
+    ${ROOT_DIR}/open_source/openharmony/third_party/lwip/lwip_v2.1.3/src/include
+    ${ROOT_DIR}/open_source/openharmony/third_party/lwip/lwip_adapter/liteos/src/include
+    # /home/hcj/615/FD230/code/sdk/application/wearable/nativeapp/nativeui/player/include/PlayersPresenter.h
+    # /home/hcj/615/FD230/code/sdk/middleware/services/gui/uikit/ui/frameworks/font/glyphs_manager.h
+    # /home/hcj/615/FD230/code/sdk//UiServersMsg.h
+)
+# /home/hcj/615/FD230/code/sdk/
+
+
+set(PRIVATE_DEFINES
+    TARGET_NAME="${TARGET_COMMAND}"
+    BUILD_TIME="${BUILD_TIME}"
+)
+
+set(PUBLIC_DEFINES
+)
+
+# use this when you want to add ccflags like -include xxx
+set(COMPONENT_PUBLIC_CCFLAGS
+)
+
+set(COMPONENT_CCFLAGS
+    -Wno-error
+    -Wno-unused-parameter
+    -fno-exceptions
+    -fno-unwind-tables
+    -fno-asynchronous-unwind-tables
+    -Wno-undef
+    -Wno-bitwise-op-parentheses
+    -Wno-shift-op-parentheses
+    -nostdlibinc
+    -nostdinc
+    -nostdlib
+    -Wno-c++11-narrowing
+    -Wno-error=unused-function
+)
+set(WHOLE_LINK
+    true
+)
+
+set(MAIN_COMPONENT
+    false
+)
+
+build_component()
diff --git a/code/sdk/zhihui/AI/AImain/uapi_ai_function.h b/code/sdk/zhihui/AI/AImain/uapi_ai_function.h
new file mode 100644 (file)
index 0000000..55ebe19
--- /dev/null
@@ -0,0 +1,8 @@
+#ifndef AI_FUNCTION_H
+#define AI_FUNCTION_H
+
+
+void uapi_CT_ai_init(void);
+
+
+#endif
\ No newline at end of file
diff --git a/code/sdk/zhihui/AI/AIota/CMakeLists.txt b/code/sdk/zhihui/AI/AIota/CMakeLists.txt
new file mode 100644 (file)
index 0000000..4ed7975
--- /dev/null
@@ -0,0 +1,82 @@
+#===============================================================================
+# @brief    cmake file
+# Copyright (c) @CompanyNameMagicTag 2022-2023. All rights reserved.
+#===============================================================================
+set(COMPONENT_NAME "AIota")
+
+set(SOURCES
+    ${CMAKE_CURRENT_SOURCE_DIR}/src/ota.c
+)
+
+set(PUBLIC_HEADER
+    ${CMAKE_CURRENT_SOURCE_DIR}/include
+    ${CMAKE_CURRENT_SOURCE_DIR}/..
+    ${CMAKE_CURRENT_SOURCE_DIR}/../AIsdk/include
+)
+set(PRIVATE_HEADER
+    ${ROOT_DIR}/open_source/openharmony/drivers/peripheral/display/interfaces/include
+    ${ROOT_DIR}/middleware/utils/update/inner_include
+    ${ROOT_DIR}/middleware/services/gui/uikit/utils/interfaces/kits
+    ${ROOT_DIR}/middleware/services/gui/uikit/utils/interfaces/innerkits
+    ${ROOT_DIR}/middleware/services/gui/uikit/proprietary/include
+    ${ROOT_DIR}/middleware/services/gui/uikit/ui/interfaces/innerkits
+    ${ROOT_DIR}/open_source/openharmony/utils/native/lite/include
+    ${ROOT_DIR}/middleware/services/gui/uikit/surface/interfaces/kits
+    ${ROOT_DIR}/open_source/openharmony/utils/native/lite/kv_store/innerkits
+    ${ROOT_DIR}/middleware/services/gui/uikit/utils/interfaces/kits/gfx_utils
+    ${ROOT_DIR}/middleware/services/media/foundation/player/interfaces/kits
+    ${ROOT_DIR}/application/wearable/nativeapp/nativeui/key/include
+    ${ROOT_DIR}/middleware/services/gui/uikit/ui/interfaces/innerkits
+    ${ROOT_DIR}/middleware/services/gui/uikit/ui/interfaces/innerkits/font
+    ${ROOT_DIR}/middleware/services/gui/uikit/ui/frameworks/font
+    ${ROOT_DIR}/middleware/services/gui/uikit/ui/frameworks
+   
+    ${ROOT_DIR}/middleware/services/gui/uikit/proprietary/src/utils/innerkits
+    ${ROOT_DIR}/zhihui/services/factorytest_service
+    ${ROOT_DIR}/zhihui/drivers/
+    ${ROOT_DIR}/zhihui/4g/cat1Service/include
+    ${ROOT_DIR}/open_source/openharmony/third_party/lwip/lwip_v2.1.3/src/include
+    ${ROOT_DIR}/open_source/openharmony/third_party/lwip/lwip_adapter/liteos/src/include
+    # /home/hcj/615/FD230/code/sdk/application/wearable/nativeapp/nativeui/player/include/PlayersPresenter.h
+    # /home/hcj/615/FD230/code/sdk/middleware/services/gui/uikit/ui/frameworks/font/glyphs_manager.h
+    # /home/hcj/615/FD230/code/sdk//UiServersMsg.h
+)
+# /home/hcj/615/FD230/code/sdk/
+
+
+set(PRIVATE_DEFINES
+    TARGET_NAME="${TARGET_COMMAND}"
+    BUILD_TIME="${BUILD_TIME}"
+)
+
+set(PUBLIC_DEFINES
+)
+
+# use this when you want to add ccflags like -include xxx
+set(COMPONENT_PUBLIC_CCFLAGS
+)
+
+set(COMPONENT_CCFLAGS
+    -Wno-error
+    -Wno-unused-parameter
+    -fno-exceptions
+    -fno-unwind-tables
+    -fno-asynchronous-unwind-tables
+    -Wno-undef
+    -Wno-bitwise-op-parentheses
+    -Wno-shift-op-parentheses
+    -nostdlibinc
+    -nostdinc
+    -nostdlib
+    -Wno-c++11-narrowing
+    -Wno-error=unused-function
+)
+set(WHOLE_LINK
+    true
+)
+
+set(MAIN_COMPONENT
+    false
+)
+
+build_component()
diff --git a/code/sdk/zhihui/AI/AIsdk/CMakeLists.txt b/code/sdk/zhihui/AI/AIsdk/CMakeLists.txt
new file mode 100644 (file)
index 0000000..f453741
--- /dev/null
@@ -0,0 +1,89 @@
+#===============================================================================
+# @brief    cmake file
+# Copyright (c) @CompanyNameMagicTag 2022-2023. All rights reserved.
+#===============================================================================
+set(COMPONENT_NAME "AIsdk")
+
+set(SOURCES
+)
+
+set(PUBLIC_HEADER
+    ${CMAKE_CURRENT_SOURCE_DIR}/include
+    ${CMAKE_CURRENT_SOURCE_DIR}/..
+    ${CMAKE_CURRENT_SOURCE_DIR}/../AIsystem
+    ${CMAKE_CURRENT_SOURCE_DIR}/../AIagent
+    ${CMAKE_CURRENT_SOURCE_DIR}/../AIota
+)
+set(PRIVATE_HEADER
+    ${ROOT_DIR}/open_source/openharmony/drivers/peripheral/display/interfaces/include
+    ${ROOT_DIR}/middleware/utils/update/inner_include
+    ${ROOT_DIR}/middleware/services/gui/uikit/utils/interfaces/kits
+    ${ROOT_DIR}/middleware/services/gui/uikit/utils/interfaces/innerkits
+    ${ROOT_DIR}/middleware/services/gui/uikit/proprietary/include
+    ${ROOT_DIR}/middleware/services/gui/uikit/ui/interfaces/innerkits
+    ${ROOT_DIR}/open_source/openharmony/utils/native/lite/include
+    ${ROOT_DIR}/middleware/services/gui/uikit/surface/interfaces/kits
+    ${ROOT_DIR}/open_source/openharmony/utils/native/lite/kv_store/innerkits
+    ${ROOT_DIR}/middleware/services/gui/uikit/utils/interfaces/kits/gfx_utils
+    ${ROOT_DIR}/middleware/services/media/foundation/player/interfaces/kits
+    ${ROOT_DIR}/application/wearable/nativeapp/nativeui/key/include
+    ${ROOT_DIR}/middleware/services/gui/uikit/ui/interfaces/innerkits
+    ${ROOT_DIR}/middleware/services/gui/uikit/ui/interfaces/innerkits/font
+    ${ROOT_DIR}/middleware/services/gui/uikit/ui/frameworks/font
+    ${ROOT_DIR}/middleware/services/gui/uikit/ui/frameworks
+   
+    ${ROOT_DIR}/middleware/services/gui/uikit/proprietary/src/utils/innerkits
+    ${ROOT_DIR}/zhihui/services/factorytest_service
+    ${ROOT_DIR}/zhihui/drivers/
+    ${ROOT_DIR}/zhihui/4g/cat1Service/include
+    ${ROOT_DIR}/open_source/openharmony/third_party/lwip/lwip_v2.1.3/src/include
+    ${ROOT_DIR}/open_source/openharmony/third_party/lwip/lwip_adapter/liteos/src/include
+    # /home/hcj/615/FD230/code/sdk/application/wearable/nativeapp/nativeui/player/include/PlayersPresenter.h
+    # /home/hcj/615/FD230/code/sdk/middleware/services/gui/uikit/ui/frameworks/font/glyphs_manager.h
+    # /home/hcj/615/FD230/code/sdk//UiServersMsg.h
+)
+# /home/hcj/615/FD230/code/sdk/
+
+
+set(PRIVATE_DEFINES
+    TARGET_NAME="${TARGET_COMMAND}"
+    BUILD_TIME="${BUILD_TIME}"
+)
+
+set(PUBLIC_DEFINES
+)
+
+# use this when you want to add ccflags like -include xxx
+set(COMPONENT_PUBLIC_CCFLAGS
+)
+
+set(COMPONENT_CCFLAGS
+    -Wno-error
+    -Wno-unused-parameter
+    -fno-exceptions
+    -fno-unwind-tables
+    -fno-asynchronous-unwind-tables
+    -Wno-undef
+    -Wno-bitwise-op-parentheses
+    -Wno-shift-op-parentheses
+    -nostdlibinc
+    -nostdinc
+    -nostdlib
+    -Wno-c++11-narrowing
+    -Wno-error=unused-function
+)
+set(WHOLE_LINK
+    true
+)
+
+set(MAIN_COMPONENT
+    false
+)
+
+find_library(LIB_PATH_COMMONA_LIB libcommon.a ${CMAKE_CURRENT_SOURCE_DIR}/lib)
+find_library(LIB_PATH_COS_LIB libcos.a ${CMAKE_CURRENT_SOURCE_DIR}/lib)
+find_library(LIB_PATH_THIRD_LIB libthirdparty.a ${CMAKE_CURRENT_SOURCE_DIR}/lib)
+
+target_link_libraries(${TARGET_NAME} PRIVATE -Wl,--whole-archive ${LIB_PATH_COMMONA_LIB} ${LIB_PATH_COS_LIB} ${LIB_PATH_THIRD_LIB} PRIVATE -Wl,--whole-archive)
+
+build_component()
diff --git a/code/sdk/zhihui/AI/AIsdk/include/main_include.h b/code/sdk/zhihui/AI/AIsdk/include/main_include.h
new file mode 100644 (file)
index 0000000..b24fdee
--- /dev/null
@@ -0,0 +1,39 @@
+#ifndef MAIN_INCLUDE_H
+#define MAIN_INCLUDE_H
+
+#include <stdio.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <pthread.h>
+#include <unistd.h>
+#include <time.h>
+#include <errno.h>
+#include "osal_task.h"
+#include "lwip/arch.h"
+#include "lwip/sockets.h"
+#include <sys/socket.h>
+#include <arpa/inet.h>
+#include "securec.h"
+
+
+#include "zj_type.h"
+#include "zj_aiagent.h"
+#include "zj_err.h"
+#include "zj_ota.h"
+#include "zj_system.h"
+#include "zj_network.h"
+#include "zj_log.h"
+#ifdef NEED_IMPLEMENT_SYSCALL
+#include "zj_syscall_prv.h"
+#include "zj_syscall.h"
+#endif
+
+#include "system.h"
+#include "agent.h"
+#ifndef WIN_TEST
+#include "ota.h"
+#endif
+
+#endif
\ No newline at end of file
diff --git a/code/sdk/zhihui/AI/AIsdk/include/zj_aiagent.h b/code/sdk/zhihui/AI/AIsdk/include/zj_aiagent.h
new file mode 100644 (file)
index 0000000..f5a67cd
--- /dev/null
@@ -0,0 +1,439 @@
+#ifndef ZJ_AIAGENT_H
+#define ZJ_AIAGENT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+* @brief 获取一个请求ID
+* @param 无
+* @return 请求ID
+*/
+_ZJ_API int ZJ_GetOneReqId(void);
+
+/**
+ * @brief 设置AI智能体能力
+ * @param iBSupport 是否支持 0 不支持,1 支持
+ * @return -1 失败,0 成功
+ */
+_ZJ_API int ZJ_SetAIAgentAbility(int iBSupport);
+
+/**
+ * @brief 设置与智能体音频交互的模式
+ * @param enMode 模式,见枚举 EN_ZJ_DUPLEX_MODE
+ * @return -1 失败,0 成功
+ */
+typedef enum enum_zj_duplex_mode{
+    AUDIO_MODE_HALF_DUPLEX = 0, // 单工
+    AUDIO_MODE_FULL_DUPLEX      // 双工
+} EN_ZJ_DUPLEX_MODE;
+
+_ZJ_API int ZJ_SetAudioDuplexMode(EN_ZJ_DUPLEX_MODE enMode);
+
+/*****************************************************
+启动智能体应用
+*****************************************************/
+typedef struct stru_ZJ_AIAgentConfig
+{
+    unsigned char ucSubmitFlag;             // 0: 平台自动提交流式语音提问; 1: 端侧手动提交提问;
+    unsigned char ucReturnReqTextFlag;      // 提问语音是否翻译成文字 0: 不返回提问文字; 1: 返回提问文字
+    unsigned char ucToneDetectionFlag;      // 0: 不开启语气检测; 1: 开启语气检测;
+    ST_ZJ_AUDIO_PARAM stInputAudioParam;    // 采集音频编码格式
+    ST_ZJ_AUDIO_PARAM stOutputAudioParam;   // 回应音频编码格式
+}ST_ZJ_AIAGENTCONFIG;
+
+/**
+ * @brief 获取AI智能体连接状态的回调函数
+ * @param iAgentStatus 连接状态 0 连接中断,1 准备就绪
+ * @return -1 失败,0 成功
+ */
+typedef int (*ZJ_PFUN_AGENTSTATUS_CB)(int iAgentStatus);
+
+/**
+ * @brief 启动AI智能体应用
+ * @param pstAIAgentConfig 智能体应用相关参数
+ * @param pFunStatusCb 智能体状态回调函数
+ * @return -1 失败,0 成功
+ */
+_ZJ_API int ZJ_StartAIAgent(ST_ZJ_AIAGENTCONFIG *pstAIAgentConfig, ZJ_PFUN_AGENTSTATUS_CB pFunStatusCb);
+
+/**
+ * @brief 停止AI智能体应用
+ * @param 无
+ * @return -1 失败,0 成功
+ */
+_ZJ_API int ZJ_StopAIAgent(void);
+
+/***************************************************************************
+获取智能体列表
+****************************************************************************/
+typedef struct stru_ZJ_ProPreProb
+{
+    unsigned char **pucStr;  // 预置问题数组
+    unsigned int uiCount;    // 预置问题数量
+}ST_ZJ_PROPREPROB;
+
+typedef struct stru_ZJ_FileAbility{
+    unsigned char **pucFileFormats; // 文件格式数组
+    unsigned int uiFormatCount;     // 文件格式数量
+    unsigned int uiFileSize;        // 文件大小(以字节为单位)
+}ST_ZJ_FILEABILITY;
+
+typedef struct stru_ZJ_AIAgentList
+{
+    unsigned char ucDefaultFlag;        // 默认选择
+    unsigned int uiAgentID;      // 智能体ID
+    unsigned char aucAgentName[256];    // 名称
+    unsigned char *pucDescribe;         // 简介
+    unsigned char aucLanguage[64];      // 语言
+    unsigned char aucIconUrl[256];      // 头像下载地址
+    unsigned char *pucUiInterTemplate;  // ui界面交互模板
+    unsigned char *pucPrompt;           // 提示词
+    unsigned char *pucPromptTemplate;   // 提示词模板
+    unsigned char *pucPrologue;         // 开场白
+    unsigned char aucBackgroundPicUrl[256]; // 聊天背景图片地址
+    unsigned int uiVoiceType;           // 声音类别
+    unsigned int uiAgentAbility;        // 智能体应用支持的能力  0x01: 文本; 0x02: 图片; 0x04: 音频;
+    ST_ZJ_FILEABILITY stFileAbility;    // 智能体应用支持的文件格式 和 大小
+    ST_ZJ_PROPREPROB stProloguePresetProblem;   // 开场白预置问题
+    struct stru_ZJ_AIAgentList *pstNext;
+}ST_ZJ_AIAGENTLIST;
+
+/**
+ * @brief 获取AI智能体列表的回调函数
+ * @param iReqId 请求ID
+ * @param pstAiAgentList AI智能体信息列表
+ * @param iRspCode 错误码 0 成功, 非0失败
+ * @return -1 失败,0 成功
+ * @note 内存由SDK释放
+ */
+typedef int (*ZJ_PFUN_GETAIAGENTLIST_CB)(int iReqId, ST_ZJ_AIAGENTLIST* pstAiAgentList, int iRspCode);
+/**
+ * @brief 获取AI智能体列表
+ * @param pFunGetAiAgentListCb 回调函数
+ * @return -1 失败,0 成功
+ */
+_ZJ_API int ZJ_GetAgentList(int iReqId, ZJ_PFUN_GETAIAGENTLIST_CB pFunGetAiAgentListCb);
+
+/***************************************************************************
+获取历史会话列表
+****************************************************************************/
+typedef struct stru_ZJ_HistorySession
+{
+    unsigned char pucSessionID[256];
+    unsigned char pucAgentID[256];
+    unsigned char *pucTitle;
+    struct stru_ZJ_HistorySession *pstNext;
+}ST_ZJ_HISTORYSESSION;
+
+/**
+ * @brief 获取AI智能体历史会话记录列表的回调函数
+ * @param iReqId 请求ID
+ * @param pstHistorySessionList 智能体历史会话记录列表
+ * @param iRspCode 错误码 0 成功, 非0失败
+ * @return -1 失败,0 成功
+ * @note 内存由SDK释放
+ */
+typedef int (*ZJ_PFUN_GETHISTORYSESSIONS_CB)(int iReqId, ST_ZJ_HISTORYSESSION* pstHistorySessionList, int iRspCode);
+
+/**
+ * @brief 获取AI智能体历史会话记录列表
+ * @param iReqId 请求ID
+ * @param pFunGetHistorySessionsCb 回调函数
+ * @return -1 失败,0 成功
+ */
+_ZJ_API int ZJ_GetHistorySessions(int iReqId, ZJ_PFUN_GETHISTORYSESSIONS_CB pFunGetHistorySessionsCb);
+
+/***************************************************************************
+获取历史会话记录
+****************************************************************************/
+typedef struct stru_ZJ_HistoryChat
+{
+    unsigned char aucTurnID[64];        // 轮次ID
+    unsigned char *pucPrompt;           // 用户提问
+    unsigned char aucContentUrl[256];   // 文本地址
+    unsigned char aucAudioUrl[256];     // 音频地址
+    unsigned char aucPictureUrl[256];   // 图片地址
+    struct stru_ZJ_HistoryChat *pstNext;
+}ST_ZJ_HistoryChat;
+
+/**
+ * @brief 获取AI智能体历史会话条目的回调函数
+ * @param iReqId 请求ID
+ * @param pstHistoryChatList 智能体历史会话条目列表
+ * @param iRspCode 错误码 0 成功, 非0失败
+ * @return -1 失败,0 成功
+ * @note 内存由SDK释放
+ */
+typedef int (*ZJ_PFUN_GETHISTORYCHAT_CB)(int iReqId, ST_ZJ_HistoryChat* pstHistoryChatList, int iRspCode);
+
+/**
+ * @brief 获取AI智能体历史会话记录列表
+ * @param iReqId 请求ID
+ * @param pFunGetHistoryChatCb 回调函数
+ * @param pucSessionID 会话ID
+ * @return -1 失败,0 成功
+ */
+_ZJ_API int ZJ_GetRetrieveChatHistory(int iReqId, unsigned char *pucSessionID, ZJ_PFUN_GETHISTORYCHAT_CB pFunGetHistoryChatCb);
+
+/***************************************************
+创建智能体应用新会话
+*****************************************************/
+/**
+ * @brief 创建AI智能体新会话的回调函数
+ * @param iReqId 请求ID
+ * @param pucSessionID 新会话ID
+ * @param iRspCode 错误码 0 成功, 非0失败
+ * @return -1 失败,0 成功
+ */
+typedef int (*ZJ_PFUN_NEWSESSIONRSP_CB)(int iReqId, unsigned char *pucSessionID, int iRspCode);
+
+/**
+ * @brief 创建AI智能体新会话
+ * @param iReqId 请求ID
+ * @param pucAgentID 智能体应用ID
+ * @param pFunNewSessionRspCb 回调函数
+ * @return -1 失败,0 成功
+ */
+_ZJ_API int ZJ_CreateNewSession(int iReqId, unsigned int uiAgentID, ZJ_PFUN_NEWSESSIONRSP_CB pFunNewSessionRspCb); 
+
+/***************************************************
+中断智能体应用会话
+*****************************************************/
+/**
+ * @brief 中断AI智能体新会话的回调函数
+ * @param iReqId 请求ID
+ * @param iRspCode 错误码 0 成功, 非0失败
+ * @return -1 失败,0 成功
+ */
+typedef int (*ZJ_PFUN_INTERRUPTSESSIONRSP_CB)(int iReqId, int iRspCode);
+
+/**
+ * @brief 中断AI智能体新会话的回调函数
+ * @param iReqId 请求ID
+ * @param pucSessionID 会话ID
+ * @param pFunInterruptSessionRspCb 回调函数
+ * @return -1 失败,0 成功
+ */
+_ZJ_API int ZJ_InterruptSession(int iReqId, unsigned char *pucSessionID, unsigned char *pucTurnID, ZJ_PFUN_INTERRUPTSESSIONRSP_CB pFunInterruptSessionRspCb);
+
+/**
+ * @brief 流式发送语音数据给AI智能体
+ * @param pucVoiceData 音频数据
+ * @param iDataLen 音频数据长度
+ * @param iRecStatus 模式
+ *      0: 开始语音提问 pucVoiceData = NULL iDataLen = 0
+ *      1: 中间音频数据
+ *      2: 结束语音提问 pucVoiceData = NULL iDataLen = 0
+ * @return -1 失败,0 成功
+ * @note 在播放音频的时候; 停止发送音频
+ * @note 注意!!! 音频格式仅支持 pcm 采样率 16000 单声道 一帧数据长度 6400 字节
+ */
+_ZJ_API int ZJ_SendVoiceDataToAIAgent(unsigned char *pucVoiceData, int iDataLen, int iRecStatus);
+
+/**
+ * @brief 上传图片到Ai智能体后的回调函数
+ * @param iReqId 请求ID
+ * @param iCode 错误码 0 成功, 非0失败
+ * @param pucFileID 图片对应的文件ID
+ * @return -1 失败,0 成功
+ */
+typedef int (*ZJ_PFUN_UPLOADPICTURERSP)(int iReqId, int iCode, unsigned char *pucFileID);
+
+/**
+ * @brief 上传图片到Ai智能体
+ * @param iReqId 请求ID
+ * @param pucPicName 文件名 包含后缀的完整名称
+ * @param pucPicBuff 图片数据
+ * @param uiPicLen 图片数据长度
+ * @param pFunUploadPicRsp 回调函数
+ * @return -1 失败,0 成功
+ * @note pucPicName 图片名称包含后缀名 控制在256字节内
+ * @note 暂时没有支持图片问答的大模型应用,此接口暂不可用
+ */
+_ZJ_API int ZJ_UploadPicture(int iReqId, unsigned char *pucPicName, unsigned char *pucPicBuff, unsigned int uiPicLen, ZJ_PFUN_UPLOADPICTURERSP pFunUploadPicRsp);
+
+typedef struct stru_ZJ_FileIDList
+{
+    unsigned char *pstFileID;   // 图片文件ID
+    struct stru_ZJ_FileIDList *pstNext;
+}ST_ZJ_FILEIDLIST;
+
+/**
+ * @brief 向Ai智能体进行提问
+ * @param ucTypeFlag 0 仅文本内容提问; 1 文本 + 图片内容提问
+ * @param pucTextData 文本内容
+ * @param pstFileIDList 图片列表
+ * @return -1 失败,0 成功
+ */
+_ZJ_API int ZJ_SendQuestionToAIAgent(unsigned char ucTypeFlag, unsigned char* pucSessionID, unsigned char *pucLastTurnID, unsigned char *pucTextData, ST_ZJ_FILEIDLIST *pstFileIDList);
+
+/***************************************************************************
+输出回调函数声明
+****************************************************************************/
+typedef int (*ZJ_PFUN_TEXT_CB)(unsigned char *pucSessionID, unsigned char *pucTurnID, unsigned char *pucTextUrl, int iRspCode);
+typedef int (*ZJ_PFUN_AUDIO_CB)(unsigned char *pucSessionID, unsigned char *pucTurnID, unsigned char *pucAudioUrl, int iRspCode);
+typedef int (*ZJ_PFUN_PICTURE_CB)(unsigned char *pucSessionID, unsigned char *pucTurnID, unsigned char *pucPictureUrl, int iRspCode);
+
+/**
+ * @brief 结果输出回调函数注册
+ * @param pFunOutputTextCb 文本输出回调函数
+ * @param pFunOutputAudioCb 音频输出回调函数
+ * @param pFunOutputPictureCb 图片输出回调函数
+ * @return -1 失败,0 成功
+ */
+_ZJ_API int ZJ_SetResultOutputCbFuncs(ZJ_PFUN_TEXT_CB pFunOutputTextCb, ZJ_PFUN_AUDIO_CB pFunOutputAudioCb, ZJ_PFUN_PICTURE_CB pFunOutputPictureCb);
+
+/**
+ * @brief 提问语音翻译文本回调函数注册
+ * @param pFunTrasTextCb 语音翻译输出回调函数
+ * @return -1 失败,0 成功
+ */
+_ZJ_API int ZJ_SetTranslateOutputCbFuncs(ZJ_PFUN_TEXT_CB pFunTrasTextCb);
+
+/***************************************************************************
+下载的文本数据回调函数注册
+****************************************************************************/
+/**
+ * @brief 流式文本输出回调函数
+ * @param uiReqID 请求ID
+ * @param pucTextBuff 文本数据
+ * @param uiBuffLen 文本数据长度
+ * @param bFinished 是否结束
+ * @param iRspCode 错误码 0 成功, 非0失败
+ * @return -1 失败,0 成功
+ */
+typedef int (*ZJ_PFUN_TEXT_DATA_CB)(unsigned int uiReqID, unsigned char *pucTextBuff, unsigned int uiBuffLen, int bFinished, int iRspCode);
+
+/**
+ * @brief 文本输出数据下载
+ * @param uiReqID 请求ID
+ * @param pucUrl 下载地址
+ * @param pFunTextDataCb 回调函数
+ * @return -1 失败,0 成功
+ */
+_ZJ_API int ZJ_UrlDownloadTextData(unsigned int uiReqID, unsigned char *pucUrl, ZJ_PFUN_TEXT_DATA_CB pFunTextDataCb);
+
+/***************************************************************************
+下载的图片数据回调函数注册
+****************************************************************************/
+/**
+ * @brief 图片输出回调函数
+ * @param uiReqID 请求ID
+ * @param pucPicBuff 图片数据
+ * @param uiBuffLen 图片据长度
+ * @param bFinished 是否结束
+ * @param iRspCode 错误码 0 成功, 非0失败
+ * @return -1 失败,0 成功
+ */
+typedef int (*ZJ_PFUN_PICTURE_DATA_CB)(unsigned int uiReqID, unsigned char *pucPicBuff, unsigned int uiBuffLen, int bFinished, int iRspCode);
+
+/**
+ * @brief 图片输出数据下载
+ * @param uiReqID 请求ID
+ * @param pucUrl 下载地址
+ * @param pFunPictureDataCb 回调函数
+ * @return -1 失败,0 成功
+ */
+_ZJ_API int ZJ_UrlDownloadPicData(unsigned int uiReqID, unsigned char *pucUrl, ZJ_PFUN_PICTURE_DATA_CB pFunPictureDataCb);
+
+/***************************************************************************
+下载的音频数据回调函数注册
+****************************************************************************/
+/**
+ * @brief 流式音频输出回调函数
+ * @param uiReqID 请求ID
+ * @param pucPackage 音频数据包
+ * @param uiPacklen 音频数据包长度
+ * @param bFinished 是否结束
+ * @param iRspCode 错误码 0 成功, 非0失败
+ * @return -1 失败,0 成功
+ * @note 注意!!! 音频输出格式为 pcm 采样率16000
+ */
+typedef int (*ZJ_PFUN_CUSTOM_AUDIOD_TRANS)(unsigned int uiReqID, unsigned char *pucPackage,unsigned int uiPacklen, int bFinished, int iRspCode);
+
+/**
+ * @brief 音频输出数据下载
+ * @param uiReqID 请求ID
+ * @param pucUrl 下载地址
+ * @param pFunAudioDataCb 回调函数
+ * @return -1 失败,0 成功
+ */
+_ZJ_API int ZJ_UrlDownloadAudioData(unsigned int uiReqID, unsigned char *pucUrl, ZJ_PFUN_CUSTOM_AUDIOD_TRANS pFunAudioDataCb);
+
+/***************************************************************************
+取消下载任务
+****************************************************************************/
+_ZJ_API int ZJ_CancelDownloadTask(unsigned int uiReqID);
+
+/***************************************************************************
+删除会话轮次记录
+****************************************************************************/
+typedef int (*ZJ_PFUN_COMMON_RSP)(unsigned int uiReqID, int iRsp);
+/**
+ * @brief 删除会话轮次记录
+ * @param uiReqID 请求ID
+ * @param pucSessionID 会话ID
+ * @param pucTurnID 轮次ID
+ * @param pFunDeleteSessionRoundCb 回调函数
+ * @return -1 失败,0 成功
+ */
+_ZJ_API int ZJ_DeleteSessionRound(unsigned int uiReqID, unsigned char *pucSessionID, unsigned char *pucTurnID, ZJ_PFUN_COMMON_RSP pFunDeleteSessionRoundCb);
+
+/***************************************************************************
+获取下一轮次建议问题列表
+****************************************************************************/
+// 用于存储每个问题项
+typedef struct stru_ZJ_Ques_Node{
+    unsigned char *pucQuestion;
+    struct stru_ZJ_Ques_Node *pstNext;
+} ST_ZJ_QUES_ITEM;
+
+typedef int (*ZJ_PFUN_GET_SUGGEST_QUES_LIST)(unsigned int uiReqID, ST_ZJ_QUES_ITEM *pstList);
+/**
+ * @brief 获取下一轮次建议问题列表
+ * @param uiReqID 请求ID
+ * @param pucSessionID 会话ID
+ * @param pucTurnID 轮次ID
+ * @param pFunGetSuggestQuesListCb 回调函数
+ * @return -1 失败,0 成功
+ */
+_ZJ_API int ZJ_GetSuggestQuesList(unsigned int uiReqID, unsigned char *pucSessionID, unsigned char *pucTurnID, ZJ_PFUN_GET_SUGGEST_QUES_LIST pFunGetSuggestQuesListCb);
+
+/***************************************************************************
+重命名会话轮次
+****************************************************************************/
+/**
+ * @brief 重命名会话轮次
+ * @param uiReqID 请求ID
+ * @param pucSessionID 会话ID
+ * @param pucTurnID 轮次ID
+ * @param pucConvName 新名称
+ * @param pFunRenameSessionRound 回调函数
+ * @return -1 失败,0 成功
+ */
+_ZJ_API int ZJ_RenameSessionRound(unsigned int uiReqID, unsigned char *pucSessionID, unsigned char *pucTurnID, unsigned char *pucConvName, ZJ_PFUN_COMMON_RSP pFunRenameSessionRound);
+
+/***************************************************************************
+获取应用meta信息
+PS: 这些东西都是电信要求返回的,具体是啥SDK不清楚,所以这里的URL不提供下载接口
+****************************************************************************/
+typedef int (*ZJ_PFUN_GET_SESSION_META_INFO)(unsigned int uiReqID, int iRsp, unsigned char *pucDalle2, unsigned char *pucBackGround, unsigned char *pucContent);
+/**
+ * @brief 获取应用meta信息
+ * @param uiReqID 请求ID
+ * @param pucSessionID 会话ID
+ * @param pFunGetSessionMetaInfoCb 回调函数
+ * @return -1 失败,0 成功
+ */
+_ZJ_API int ZJ_GetSessionMetaInfo(unsigned int uiReqID, unsigned char *pucSessionID, ZJ_PFUN_GET_SESSION_META_INFO pFunGetSessionMetaInfoCb);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+
diff --git a/code/sdk/zhihui/AI/AIsdk/include/zj_err.h b/code/sdk/zhihui/AI/AIsdk/include/zj_err.h
new file mode 100644 (file)
index 0000000..cc8293b
--- /dev/null
@@ -0,0 +1,235 @@
+#ifndef _ZJ_ERR_H_
+#define _ZJ_ERR_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+ 
+/*
+**定义服务器和sdk之间通信的错误码
+*/
+typedef enum enum_ZJ_ERR_TYPE{
+       EN_ZJ_ERR                                                                       = -1,   /*common err*/
+       EN_ZJ_ERR_PARAM                                                                 = -2,   /*param err*/
+       EN_ZJ_ERR_NOMEM                                                                 = -3,   /*no memory*/
+       EN_ZJ_ERR_NOINIT                                                                = -4,   /*parameter not init*/
+       EN_ZJ_ERR_NORES                                                                 = -5,    /*no mutex, no thread, no file,inc*/
+       EN_ZJ_ERR_OVERFLOW                                                              = -6,   /*stack overflow*/
+       EN_ZJ_ERR_MAGIC_N                                                               = -7,   /*the heap PTR of struct is modified err */
+       EN_ZJ_ERR_KEY_UNEXIST                                                           = -8,   /*key not exist */
+       EN_ZJ_ERR_FILE_EXIST                                                            = -9,   /*key is exist */
+       EN_ZJ_ERR_AUTHORITY                                                             = -10,   /*No authority  */
+       EN_ZJ_ERR_CLOSE                                                                 = -11,   /*Fun Not open  */
+       EN_ZJ_ERR_SUPPORT                                                               = -12,   /*Fun Not support  */
+       EN_ZJ_ERR_NOADDR                                                                = -13,  /*addr path is err*/
+       EN_ZJ_ERR_FREQUENTLY                                                            = -14,  /*request too many times*/
+       EN_ZJ_ERR_TRYAGAIN                                                              = -15,  /*please try again*/
+       EN_ZJ_ERR_FULL                                                                  = -16,  /*dev list full*/
+    EN_ZJ_ERR_INTERCOM                                  = -17,
+       EN_ZJ_ERR_NET                                                                   = -80,  /*connect net err*/
+       EN_ZJ_ERR_TIMEOUT                                                               = -83,  /*wait time out*/
+       EN_ZJ_DES_CHANGE                                                                = -100, /*des changed*/
+       EN_ZJ_ERR_FILEEND                                                               = -101, /*at the end of file*/
+       EN_ZJ_ERR_FILEWAIT                                                              = -102, 
+       EN_ZJ_ERR_EXIST                                                                 = -110, /*dev exist*/
+       EN_ZJ_ERR_SLEEP                                     = -111, /*dev sleep*/
+
+    EN_ZJ_ERR_OK                                               = 0,       //请求成功
+    EN_ZJ_ERR_SDK_CHARACTER                             = 1001,    //配置WIFI时,传入SSID有无效字符
+    EN_ZJ_ERR_SDK_NO_WIFI_MODULE                        = 1002,    //查询WIFI列表,设备没有WIFI模块
+    EN_ZJ_ERR_SDK_WIFI_ISCLOSE                          = 1003,    //查询WIFI列表,WIFI模块关闭
+    EN_ZJ_ERR_SVR_SIGN_NO_SVR_DISTRI                    = 1101,    //SIGN分配服务时,没有可分配的服务
+    EN_ZJ_ERR_SVR_FREQUENT_OPERATION                           = 1103,    //访问频繁
+    EN_ZJ_ERR_SVR_COMPANYID_INVALID                            = 1111,    //鉴权的企业ID不存在
+    EN_ZJ_ERR_SVR_COMPANY_NO_PRIVILEGE                         = 1112,    //鉴权的企业ID对应的企业被平台禁用
+    EN_ZJ_ERR_SVR_APPID_INVALID                                = 1113,    //鉴权传入的AppID在企业下不存在
+    EN_ZJ_ERR_SVR_APPID_NO_PRIVILEGE                           = 1114,    //鉴权传入的AppID被企业/平台禁用
+    EN_ZJ_ERR_SVR_LICENSENOTEXIST                              = 1115,    //传入授权的CTEI码没有找到
+    EN_ZJ_ERR_SVR_LICENSEEXPIRE                                = 1116,    //授权用的CTEI码已经过期
+    EN_ZJ_ERR_SVR_LICENSEDISABLE                               = 1117,    //授权用的CTEI码被平台禁用
+    EN_ZJ_ERR_SVR_APPHAVENOLICENSECOUNT                        = 1118,    //按量授权的AppID下无可用的授权数量
+    EN_ZJ_ERR_SVR_DEVICENOTHERE                                = 1121,    //设备登陆传入的设备ID无效,设备收到该错误码,重新注册新的ID
+    EN_ZJ_ERR_SVR_DEVICEDISABLE                                = 1122,    //该设备被平台禁用,设备无法上云
+    EN_ZJ_ERR_SVR_DEVICE_VERSION_DISABLE                       = 1123,    //设备版本太旧,系统不再兼容。设备此时需要进行升级
+    EN_ZJ_ERR_SVR_DEVICESVR_CALL_FAILED                        = 1131,    //设备配置管理系统访问报错
+    EN_ZJ_ERR_SDK_DEVICE_NO_BUSI_CONFIG                = 1141,    //设备尚未上传业务配置
+    EN_ZJ_ERR_SDK_RESOLUTION_ABILITY_NOT_SUPPORT       = 1142,    //设置的设备分辨率,当前设备不支持
+    EN_ZJ_ERR_SDK_RESOLUTION_BUSI_NOT_SUPPORT                  = 1143,    //设置的设备分辨率,可能因业务限制不支持(授权限制)
+    EN_ZJ_ERR_SDK_PTZ_ISMAX                                                    = 1144,    //设备执行PTZ已经转到最大值
+    EN_ZJ_ERR_SDK_PTZ_INCRUISE                          = 1145,    //设备正在执行PTZ巡航
+    EN_ZJ_ERR_SDK_EXITGROUP_ERR                                                = 1146,    //设备要出的组,不是设备当前的组,出组失败
+    EN_ZJ_ERR_SDK_SDCARD_FORMATTING_ERR                                = 1148,    //设备格式化SD失败
+    EN_ZJ_ERR_SDK_SDCARD_NOT_EXIST                                     = 1149,    //格式化SD卡时,SD卡不存在
+    EN_ZJ_ERR_SDK_SDCARD_WR_ERR                                                = 1150,    //读写SD卡时,操作失败
+    EN_ZJ_ERR_SDK_ADD_CHILD_DEVICE_TIMEOUT                     = 1151,    //添加HUB子设备时,通信超时,失败
+    EN_ZJ_ERR_SDK_CHILD_DEVICE_EXIST                                   = 1152,    //添加HUB子设备时,设备ID重复
+    EN_ZJ_ERR_SDK_HUB_OPT_ERR                                                  = 1153,    //HUB发生异常,操作失败
+    EN_ZJ_ERR_SDK_QUERY_RECORD_NO_PRIVILEGE                    = 1154,    //当前查询记录没有操作权限
+    EN_ZJ_ERR_SVR_CLOUDSVR_CALL_FAILED                                 = 1155,    //无法访问当前云存记录服务
+    EN_ZJ_ERR_SDK_LOCAL_RECORD_NOT_EXIST                               = 1156,    //当前查询详情的本地记录文件已被清理
+    EN_ZJ_ERR_SDK_CLOUD_FILE_EXPIRE                                    = 1157,    //当前查询的云记录文件已经过期
+    EN_ZJ_ERR_SDK_NOTNEED_OTA                           = 1167,    //当前设备不需要OTA
+    EN_ZJ_ERR_SDK_MULMEDIA_OVERLOAD                     = 1168,    //流媒体负载比较重
+    EN_ZJ_ERR_SVR_ACCOUNT_ISEXIST                                              = 2001,    //账号已存在
+    EN_ZJ_ERR_SVR_VERIFICATION_CODE_NOTEXIST                   = 2207,    //验证码不存在
+    EN_ZJ_ERR_SVR_REG_OTHER_ERR                                                = 2003,    //其他注册失败原因
+    EN_ZJ_ERR_SVR_ACCOUNT_NOTEIXST                                     = 2004,    //账号不存在
+    EN_ZJ_ERR_SVR_USER_ACCOUNT_PWD_ERR                                 = 2005,    //User登录账号密码错误
+    EN_ZJ_ERR_SVR_VERIFY_OPENID_ERR                                    = 2006,    //第三方登陆时,第三方校验失败
+    EN_ZJ_ERR_SVR_ACCOUNT_FORBIDDEN                                    = 2007,    //登陆时,发现账户已经被禁用
+    EN_ZJ_ERR_SVR_UTOKEN_NOTEXIST                                              = 2008,    //UTOKEN不存在
+    EN_ZJ_ERR_SVR_SMSCODE_FREQUENT                                     = 2009,    //两次获取短信验证码时间过短,返回失败
+    EN_ZJ_ERR_SVR_USER_REJECT_INVITE                                   = 2010,    //给用户发送分享邀请,被邀请者拒绝
+    EN_ZJ_ERR_SVR_GTOKENNOTMATCH                                               = 2011,    //通过Gtoken入组,Gtoken失效
+    EN_ZJ_ERR_SVR_DEVICEISINGROUP                                              = 2012,    //添加设备进组时失败,设备已经加入了另一个组
+    EN_ZJ_ERR_SVR_USERNOPRIVILEGE                                              = 2013,    //用户无操作权限
+       EN_ZJ_ERR_SVR_ACCOUNT_TYPE_NOT_SUPPORT                          = 2014,    //获取短信验证码时,不支持手机邮箱以外的方式获取
+       EN_ZJ_ERR_SVR_ACCOUNT_FORMAT_ERR                                        = 2015,    //账号格式错误
+       EN_ZJ_ERR_SVR_ACCOUNT_ALREADY_BIND                                      = 2016,    //账号已被绑定
+       EN_ZJ_ERR_SVR_ACCOUNT_BIND_ERR                                          = 2017,    //绑定账号错误
+       EN_ZJ_ERR_SVR_FILEID_NOT_EXIST                                          = 2018,    //云存储文件ID不存在
+       EN_ZJ_ERR_SVR_APPID_NOTFOUND_TEMPLATE                   = 2027,    //APPID未找到对应的短信/ems模板
+    EN_ZJ_ERR_SVR_DEVICE_P2P_NOT_SUPPORT                               = 3001,    //当用户向设备请求P2P时,设备返回不支持P2P
+    EN_ZJ_ERR_SVR_CONN_NOT_MATCH                                               = 3002,    //用户与设备的P2P连接校验不匹配
+    EN_ZJ_ERR_SVR_MEDIA_MATCH_TIMEOUT                                  = 3003,    //用户和设备在MEDIA上配对超时
+    EN_ZJ_ERR_SVR_MEDIA_CHANNEL_NOTEXIST                               = 3004,    //媒体操作时,对应的ChannelID不存在
+    EN_ZJ_ERR_SVR_MEDIA_PLAY_UPPER_LIMIT                               = 3005,    //点播流媒体时,人数超上限
+    EN_ZJ_ERR_SVR_MEDIA_INVALID                                                = 3006,    //流媒体服务时,资源过期或无效
+       EN_ZJ_ERR_SVR_MALLOC_ERR                                                = 4001,         //服务申请内存对象错误
+       EN_ZJ_ERR_SVR_JSON_DECODE_ERR                                   = 4002,         //服务解析JSON协议错误
+       EN_ZJ_ERR_SVR_JSON_ENCODE_ERR                                   = 4003,         //服务构造JSON字符串错误
+       EN_ZJ_ERR_SVR_API_PARAM_ERR                                             = 4004,         //API调用参数错误
+       EN_ZJ_ERR_SVR_METHOD_ERR                                                = 4005,         //API返回NIL
+       EN_ZJ_ERR_SVR_ENCRYPT_ERR                                               = 4006,         //协议加密错误
+       EN_ZJ_ERR_SVR_DECRYPT_ERR                                               = 4007,         //协议解密错误
+       EN_ZJ_ERR_SVR_BUFREAD_ERR                                               = 4008,         //链接读取BUFFER错误
+       EN_ZJ_ERR_SVR_TLS_PEMKEY_ERR                                    = 4009,         //TLS链接找不到PEM KEY文件错误
+       EN_ZJ_ERR_SVR_AUTHATOKEN_ERR                                    = 4010,         //服务器之间访问调用 ATOKEN出错
+       EN_ZJ_ERR_SVR_REDIS_PUB_ERR                                             = 4011,         //Redis服务访问错误
+       EN_ZJ_ERR_SVR_DB_CONNECT_ERR                                    = 4012,         //数据库连接失败
+       EN_ZJ_ERR_SVR_DB_INSERT_ERR                                             = 4013,         //数据库数据插入失败
+       EN_ZJ_ERR_SVR_DB_SELECT_ERR                                             = 4014,         //数据库数据查询失败
+       EN_ZJ_ERR_SVR_DB_UPDATE_ERR                                             = 4015,         //数据库数据更新失败
+       EN_ZJ_ERR_SVR_DB_DELETE_ERR                                             = 4016,         //数据库数据删除失败
+       EN_ZJ_ERR_SVR_DB_NORECORD_ERR                                   = 4017,         //没有找到相关记录
+       EN_ZJ_ERR_SVR_DB_DUPLICATE_KEY                                  = 4018,         //主键重复
+       EN_ZJ_ERR_SVR_NET_LISTEN_ERR                                    = 4019,         //服务端口侦听错误
+       EN_ZJ_ERR_SVR_CLOSED                                                    = 4020,         //服务关闭错误
+       EN_ZJ_ERR_SVR_IDSVR_NOT_FOUND                                   = 4021,         //IDSVR服务找不到
+       EN_ZJ_ERR_SVR_IDSTUNSVR_NOT_FOUND                               = 4022,         //IDSTUN服务找不到
+       EN_ZJ_ERR_SVR_BUSISVR_NOT_FOUND                                         = 4023,         //BUSICENTRE服务找不到
+       EN_ZJ_ERR_SVR_MEDIASVR_NOT_FOUND                                        = 4024,         //媒体服务找不到
+       EN_ZJ_ERR_SVR_LINKSVR_NOT_FOUND                                         = 4025,         //LINK服务找不到
+       EN_ZJ_ERR_SVR_USERSVR_CALL_FAILED                                       = 4026,         //用户系统接口调用失败
+       EN_ZJ_ERR_SVR_IDSVR_CALL_FAILED                                         = 4027,         //IDSVR系统接口调用失败
+       EN_ZJ_ERR_SVR_IDSTUN_CALL_FAILED                                        = 4028,         //IDSTUN系统接口调用失败
+       EN_ZJ_ERR_SVR_PUSHSVR_NOT_FOUND                                         = 4029,         //推送服务找不到
+       EN_ZJ_ERR_SVR_GATEWAYSVR_CALL_FAILED                            = 4030,         //网关服务调用失败
+       EN_ZJ_ERR_SVR_COMPMNGSVR_CALL_FAILED                            = 4031,         //企业后台服务调用失败
+       EN_ZJ_ERR_SVR_PUBSUBSVR_NOT_FOUND                                       = 4032,         //订阅发布服务找不到
+       EN_ZJ_ERR_SVR_SYSNOTICESVR_NOT_FOUND                            = 4033,         //sysnotice找不到
+       EN_ZJ_ERR_SVR_GATEWAYSVR_NOT_FOUND                                      = 4034,         //网关服务找不到
+       EN_ZJ_ERR_SVR_HTTPSVR_NOT_FOUND                                         = 4035,         //http服务找不到
+       EN_ZJ_ERR_SVR_HTTPSVR_CALL_FAILED                                       = 4036,         //http服务调用失败
+       EN_ZJ_ERR_SVR_BUSISVR_CALL_FAILED                                       = 4037,         //busicentre调用失败
+       EN_ZJ_ERR_SVR_ID_CALL_FAILED                                            = 4038,         //IDSVR调用失败
+       EN_ZJ_ERR_SVR_SIGN_CALL_FAILED                                          = 4039,         //SIGN服务调用失败
+       EN_ZJ_ERR_SVR_LINK_CALL_FAILED                                          = 4040,         //Link服务调用失败
+       EN_ZJ_ERR_SVR_LOGSVR_CALL_FAILED                                        = 4041,         //LOG系统调用失败
+       EN_ZJ_ERR_SVR_USERSVR_NOT_FOUND                                         = 4042,         //用户系统找不到
+       EN_ZJ_ERR_SVR_SYSNOTICESVR_CALL_FAILED                          = 4043,         //sysnotice找不到调用失败
+       EN_ZJ_ERR_SVR_PUBSUBSVR_CALL_FAILED                                     = 4044,         //订阅发布服务调用失败
+       EN_ZJ_ERR_SVR_DYNAMICMETHOD_CALL_FAILED                         = 4045,         //notice动态调用其他服务失败
+       EN_ZJ_ERR_SVR_PLAYLOAD_IS_FULL                                          = 4046,         //负载为空
+       EN_ZJ_ERR_SVR_GRPCSVR_CALL_FAILED                                       = 4047,         //GRPC调用失败
+       EN_ZJ_ERR_SVR_DEVICESVR_NOT_FOUND                                       = 4048,         //设备系统位找不到
+       EN_ZJ_ERR_SVR_EVENTSVR_NOT_FOUND                                        = 4049,         //事件系统找不到 
+       EN_ZJ_ERR_SVR_ZONE_NOT_FOUND                                            = 4050,         //ZONE服务找不到
+       EN_ZJ_ERR_SVR_NET_WRITE_BLOCK                                           = 4051,         //网络通道写入包失败
+       EN_ZJ_ERR_SVR_SOCKET_CLOSED                                                     = 4052,         //SOCKET连接已关闭
+       EN_ZJ_ERR_SVR_SOCKET_READERR                                            = 4053,         //SOCKET连接读取包失败
+       EN_ZJ_ERR_SVR_ID_PARSEERR                                                       = 4054,         //ID参数解析失败(格式不争取)
+       EN_ZJ_ERR_SVR_NET_DNSPARSE_ERR                                          = 4055,         //
+       EN_ZJ_ERR_SVR_NET_REQ_TIMEOUT                                           = 4056,         //网络请求超时
+       EN_ZJ_ERR_SVR_SUBPUB_TOKEN_NOTEXIST                                     = 4057,         
+       EN_ZJ_ERR_SVR_SOCKET_ACCEPT_ERROR                                       = 4058,         
+       EN_ZJ_ERR_SVR_OPERATION_TOO_FREQUENT                            = 4059,         
+       EN_ZJ_ERR_SVR_PARSE_IP_ERR                                                      = 4060,         
+       EN_ZJ_ERR_SVR_GETSVRPUBKEY_ERR                                          = 4061,         //获取pubkey
+       EN_ZJ_ERR_SVR_LINKNOTICESVR_NOT_FOUND                           = 4062,         //LINKNOTICE找不到
+       EN_ZJ_ERR_SVR_ENCRYPTTYPE_ERROR                                         = 4064,         //加密类型错误
+       EN_ZJ_ERR_SVR_VIDEOSVR_NOT_FOUND                                        = 4065,         //视频存储服务找不到
+       EN_ZJ_ERR_SVR_EXCEPTIONSVR_NOT_FOUND                            = 4066,         //EXCEPTION服务找不到
+       EN_ZJ_ERR_SVR_LOGSVR_NOT_FOUND                                          = 4067,         //LOGSVR找不到
+       EN_ZJ_ERR_SVR_OPRECORDSVR_NOT_FOUND                                     = 4068,         //OPRECORD服务找不到
+       EN_ZJ_ERR_SVR_NATSTUNSVR_NOT_FOUND                                      = 4069,         //NATSTUN服务找不到
+       EN_ZJ_ERR_SVR_COMBO_CALL_FAILED                                         = 4070,         //套餐服务调用失败
+       EN_ZJ_ERR_SVR_COMBO_NOT_FOUND                                           = 4071,         //套餐服务找不到
+       EN_ZJ_ERR_SVR_BINDSVR_NOT_FOUND                                         = 4073,         //绑定服务找不到
+       EN_ZJ_ERR_SVR_PICTURESVR_NOT_FOUND                                      = 4074,         //图片系统找不到
+       EN_ZJ_ERR_SVR_GROUPNOTHERE                                                      = 4407,         //组不存在
+       EN_ZJ_ERR_SVR_DEVICENOTINGROUP                                          = 4409,         //Device不在组里
+       EN_ZJ_ERR_SVR_WAKEUP_DEVICEERR                                          = 4422,         //唤醒出错
+       EN_ZJ_ERR_SVR_DEVICEOFFLINE                                                     = 4602,         //Device不在线
+       EN_ZJ_ERR_SVR_DEVICE_ISSLEEP                                            = 4610,         //设备已休眠
+       EN_ZJ_ERR_SVR_HAVENOGROUPS                                                      = 4612,         //没有组列表
+       EN_ZJ_ERR_SVR_REG_AUTH_ERR                                                      = 5001,         //SIGN服务注册 SVRID&SVRPWD校验错误
+       EN_ZJ_ERR_SVR_SIGN_ATOKEN_NOT_EXIST                                     = 5002,         //SIGN服务通过SVR ATOKEN找不到服务
+       EN_ZJ_ERR_SVR_SIGN_MANAGE_NOMETHOD                                      = 5004,         //SIGN的Manage接口method不支持
+       EN_ZJ_ERR_SVR_GENERALUTOKEN_ERR                                         = 5005,         //BUSI生成UTOKEN错误
+       EN_ZJ_ERR_SVR_UTOKEN_NOTAUTHED                                          = 5006, 
+       EN_ZJ_ERR_SVR_USERNOTHERE                                                       = 5007, 
+       EN_ZJ_ERR_SVR_USERISINGROUP                                                     = 5011, 
+       EN_ZJ_ERR_SVR_ROLENOTEXIST                                                      = 5013, 
+       EN_ZJ_ERR_SVR_CHILDGROUPNOTEXIST                                        = 5014, 
+       EN_ZJ_ERR_SVR_ROLEISINUSE                                                       = 5015, 
+       EN_ZJ_ERR_SVR_GROUPISINGROUP                                            = 5016, 
+       EN_ZJ_ERR_SVR_USERNOTINGROUP                                            = 5017, 
+       EN_ZJ_ERR_SVR_GROUPNOTINGROUP                                           = 5019, 
+       EN_ZJ_ERR_SVR_DEVICEISSLEEP                                                     = 5021, 
+       EN_ZJ_ERR_SVR_ID_MAXIDINDEX_GETERR                                      = 5024, 
+       EN_ZJ_ERR_SVR_APPNOTEXIST                                                       = 5026, 
+       EN_ZJ_ERR_SVR_APPDISABLE                                                        = 5027, 
+       EN_ZJ_ERR_SVR_APPAUTHTYPE_ERR                                           = 5031, 
+       EN_ZJ_ERR_SVR_APPISEXIST                                                        = 5032, 
+       EN_ZJ_ERR_SVR_ACCOUNTTYPENOTBIND                                        = 5034, 
+       EN_ZJ_ERR_SVR_APPAUTHTYPENOTSUPPORT                                     = 5036, 
+       EN_ZJ_ERR_SVR_DEVICE_NOT_AUTH                                           = 5038, 
+       EN_ZJ_ERR_SVR_UTOKEN_NOT_AUTH                                           = 5039, 
+       EN_ZJ_ERR_SVR_DEVICE_FORBIDDEN                                          = 5040, 
+       EN_ZJ_ERR_SVR_UTOKEN_FORBIDDEN                                          = 5041, 
+       EN_ZJ_ERR_SVR_UTOKEN_CHECKERR                                           = 5042, 
+       EN_ZJ_ERR_SVR_SYSCOMMAND_FAIL                                           = 5043, 
+       EN_ZJ_ERR_SVR_PUSHTEMPLATENOTEXIST                                      = 5044, 
+       EN_ZJ_ERR_SVR_DEVICE_LIMIT_AUTH                                         = 5045, 
+       EN_ZJ_ERR_SVR_SIGN_SVRKEY_NOTEXIST                                      = 5046, 
+       EN_ZJ_ERR_SVR_SVRPUBKEY_NOTEXIST                                        = 5047, 
+       EN_ZJ_ERR_SVR_FILETYPE_NOTEXIST                                         = 5048, 
+       EN_ZJ_ERR_SVR_SUBPUB_SUBJ_NOT_EXIST                                     = 8000, 
+       EN_ZJ_ERR_SVR_SUBPUB_ID_TYPE_NOT_SUPPORT                = 8001, 
+       EN_ZJ_ERR_SVR_NOTICE_QUEUE_WRITE_ERR                            = 8002,         //NOTICE服务写入队列失败
+       EN_ZJ_ERR_SVR_NOTICE_PROTO_NOT_SUPPORT                          = 8003,         //NOTICE通知协议不支持
+       EN_ZJ_ERR_SVR_LANGUAGE_NOT_EXIST                                        = 8004,         //语言不存在
+       EN_ZJ_ERR_SVR_SUBPUB_PUBLISH_MSG_ERR                            = 8005,         //订阅发布服务Publish失败
+       EN_ZJ_ERR_SVR_NOTICE_JUMP_NOTIE_SUPPORT                         = 8006,         //NOTICE跨机房调用不支持
+    EN_ZJ_ERR_SVR_SIGNAL_NOT_SUPPORT                                   = 9001,    //所发送的指令,对方不支持该指令集;(版本/型号错误导致)
+    EN_ZJ_ERR_SVR_SERVICE_TIMEOUT                                              = 9002,    //指令发送后,超过超时时间仍没有回应;
+    EN_ZJ_SVR_SIGNAL_ALREADY_CACHE                                         = 9003,    //通过服务端转发信令,设备支持信令缓存,设备在线,则回应。
+    EN_ZJ_ERR_SVR_SIGNAL_DISCARD                                               = 9004,    //通过服务端转发信令,不支持信令缓存,设备不在线,则回应。
+    EN_ZJ_ERR_SVR_CMD_NOT_SUPPORT                                              = 9010,    //版本较旧,或设备类型不符合不支持当前指令。
+    EN_ZJ_ERR_SVR_DEVICE_REG_FORBIDDEN                                 = 9030,    //设备注册无权限,或服务限制,设备不再重试
+    EN_ZJ_ERR_SVR_DEVICE_LOGIN_FORBIDDEN                               = 9031,    //设备登陆被禁用,设备不再重试
+
+
+}EN_ZJ_ERR_TYPE;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif
+
+
+
diff --git a/code/sdk/zhihui/AI/AIsdk/include/zj_log.h b/code/sdk/zhihui/AI/AIsdk/include/zj_log.h
new file mode 100644 (file)
index 0000000..4df6a2e
--- /dev/null
@@ -0,0 +1,61 @@
+#ifndef _ZJ_LOG_H_
+#define _ZJ_LOG_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef WIN32
+#define _ZJ_FUNC     __FUNCTION__ 
+#else
+#define _ZJ_FUNC     __func__
+
+#endif
+
+typedef enum enum_ZJ_LOG_LVL{
+   EN_ZJ_LOG_LVL_NONE  = 0x0000,
+   EN_ZJ_LOG_LVL_ERR   = 0x0001,
+   EN_ZJ_LOG_LVL_WARN  = 0x0002,
+   EN_ZJ_LOG_LVL_INFO  = 0x0004,
+   EN_ZJ_LOG_LVL_DBG   = 0x0008,
+   EN_ZJ_LOG_LVL_ALL   = 0x00FF, 
+}EN_ZJ_LOG_LVL;
+
+typedef enum enum_ZJ_LOGCOLLECT_MODEL{
+    EN_ZJ_LOGCOLLECT_TFCARD        = 2,
+    EN_ZJ_LOGCOLLECT_NET           = 4,
+    EN_ZJ_LOGCOLLECT_ENCODER       = 9,
+}EN_ZJ_LOGCOLLECT_MODEL;
+ 
+/**
+ * @brief 设置SDK调试模式
+ * @param iDebugMode 0.关闭print 1.打开print
+ * @return 0 成功 -1 失败
+ */
+_ZJ_API int ZJ_SetDebugMode(int iDebugMode);
+
+/**
+ * @brief 设置SDK日志开关
+ * @param iDebugMode 0.关闭 1.打开
+ * @return 0 成功 -1 失败
+ */
+_ZJ_API int ZJ_SetLogOpenFlag(int iOpenFlag);
+
+ /**
+ * @brief 设置SDK日志等级
+ * @param iLevel 等级   EN_ZJ_LOG_LVL
+ * @return 0 成功 -1 失败
+ */
+ _ZJ_API int ZJ_SetDebugLevel(EN_ZJ_LOG_LVL iLevel);
+
+
+#define ZJ_LOG_ERR(_pucFormat, ...) ZJ_LogPrintf((unsigned char*)_ZJ_FUNC,__LINE__,(unsigned char*)"APP", EN_ZJ_LOG_LVL_ERR,(unsigned char*)_pucFormat, ##__VA_ARGS__)
+
+#define ZJ_LOG_INF(_pucFormat, ...) ZJ_LogPrintf((unsigned char*)_ZJ_FUNC,__LINE__,(unsigned char*)"APP", EN_ZJ_LOG_LVL_INFO,(unsigned char*)_pucFormat, ##__VA_ARGS__)
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
\ No newline at end of file
diff --git a/code/sdk/zhihui/AI/AIsdk/include/zj_network.h b/code/sdk/zhihui/AI/AIsdk/include/zj_network.h
new file mode 100644 (file)
index 0000000..b05cfff
--- /dev/null
@@ -0,0 +1,28 @@
+#ifndef _ZJ_NETWORK_H_
+#define _ZJ_NETWORK_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @brief 设置设备网络状态
+ * @param enNetType 网络类型 EN_ZJ_NETWORK_TYPE
+ * @param iConnectFlag 连接标志  0 表示没有连接,1 表示连接成功
+ * @return 0 成功 -1 失败
+ */
+_ZJ_API int ZJ_SetNetWorkType(EN_ZJ_NETWORK_TYPE enNetType,int iConnectFlag);
+
+/**
+ * @brief 设备扫描app二维码添加接口
+ * @param pstrQRCode 二维码信息
+ * @return 0 成功 -1 失败
+ * @note 预留接口
+ */
+_ZJ_API int ZJ_SetQRCodeString(unsigned char *pstrQRCode);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/code/sdk/zhihui/AI/AIsdk/include/zj_ota.h b/code/sdk/zhihui/AI/AIsdk/include/zj_ota.h
new file mode 100644 (file)
index 0000000..84bde5d
--- /dev/null
@@ -0,0 +1,45 @@
+#ifndef _ZJ_OTA_H_
+#define _ZJ_OTA_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @brief 设备OTA相关回调注册接口
+ * @param pFunNewVersionCb 回调函数
+ * @param pFunVersonDataDownCb 回调函数
+ * @param pFunStopUpgrade 回调函数
+ * @param pFunCoverImageNotice 回调函数
+ * @return 0 成功 -1 失败
+ */
+_ZJ_API int ZJ_SetOtaCBFuncs(ZJ_PFUN_NEWVERSON_NOTICE pFunNewVersionCb,ZJ_PFUN_NEWVERSON_DATADOWN pFunVersonDataDownCb, 
+    ZJ_PFUN_STOPUPGRADE pFunStopUpgrade,ZJ_PFUN_COVERIMAGE_NOTICE pFunCoverImageNotice);
+
+/**
+ * @brief 设备开始镜像覆盖
+ * @param 无
+ * @return 0 成功 -1 失败
+ */
+_ZJ_API int ZJ_StartUpdate(void);
+
+/**
+ * @brief 设备镜像覆盖过程中进度上报
+ * @param uiPercentage 进度 1~99
+ * @return 0 成功 -1 失败
+ */
+_ZJ_API int ZJ_SetBurnningProgress(unsigned int uiPercentage);
+
+//设置OTA升级能力,具备多种能力按位与
+/**
+ * @brief 设置设备支持的OTA能力
+ * @param uiOTAAbility 能力  EN_ZJ_OTA_ABILITY
+ * @return 0 成功 -1 失败
+ */
+_ZJ_API int ZJ_SetOTAAbility(unsigned int uiOTAAbility);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
\ No newline at end of file
diff --git a/code/sdk/zhihui/AI/AIsdk/include/zj_system.h b/code/sdk/zhihui/AI/AIsdk/include/zj_system.h
new file mode 100644 (file)
index 0000000..842bbbe
--- /dev/null
@@ -0,0 +1,149 @@
+#ifndef _ZJ_SYSTEM_H_
+#define _ZJ_SYSTEM_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "osal_task.h"
+
+/**
+* @brief 设备初始化接口
+* @param pucSystemPath 系统路径
+* @param pcConfPath 配置路径
+* @return 0 成功 -1 失败
+* @note 系统路径在重置 的时候,改目录下的任何文件都不要删除。
+*          需要确保路径可访问,如不可访问则会返回对应的错误状态信息。
+*/
+_ZJ_API int ZJ_Init(char *pucSystemPath, char* pcConfPath, ZJ_PFUN_THIRDOUTPUTLOG_CB pFunThirdOutputLogCb);
+
+/**
+ * @brief 设备初始化扩展接口1
+ * @param pucSystemPath 系统路径
+ * @param pcConfPath 配置路径
+ * @param pucLogPath 日志路径
+ * @return 0 成功 -1 失败
+ */
+_ZJ_API int ZJ_InitEx(char *pucSystemPath, char* pcConfPath,char *pucLogPath);
+
+/**
+ * @brief 设备初始化扩展接口2
+ * @param pucSystemPath 系统路径
+ * @param pcConfPath 配置路径
+ * @param pucLogPath 日志路径
+ * @param iFileSize 文件的大小, 单位 字节
+ * @param iFileMaxCount 文件的数目
+ * @return 0 成功 -1 失败
+ */
+_ZJ_API int ZJ_InitEx2(char *pucSystemPath, char* pcConfPath,char *pucLogPath,int iFileSize,int iFileMaxNum);
+
+/**
+ * @brief 设置企业ID和产品ID
+ * @param pucCompanyId 企业ID
+ * @param pucAppId 产品ID
+ * @return 0 成功 -1 失败
+ */
+_ZJ_API int ZJ_SetCompanyInfo(unsigned char *pucCompanyId,unsigned char* pucAppId);
+
+/**
+ * @brief 设置设备唯一标识
+ * @param pucCTEI 设备LICENSE
+ * @return 0 成功 -1 失败
+ */
+_ZJ_API int ZJ_SetCTEIID(unsigned char* pucCTEI);
+
+/**
+ * @brief 设置设备型号
+ * @param pucDevModel 设备型号  比如 EF-FH8632-0530-00  第一位 sdk 开发者 , 第二位厂商芯片信号 第三 产品型号 第四 省份
+ * @return 0 成功 -1 失败
+ */
+_ZJ_API int ZJ_SetDeviceModel(unsigned char *pucDevModel);
+
+/**
+ * @brief 设置设备系统类型
+ * @param uiOsType 系统类型
+ * @return 0 成功 -1 失败
+ * @note EN_ZJ_OS_TYPE
+ */
+_ZJ_API int ZJ_SetDevOsType(unsigned int uiOsType);
+
+/**
+ * @brief 设置设备固件版本号
+ * @param pcVersion 版本号
+ * @return 0 成功 -1 失败
+ * @note 版本号定义遵循版本号定义规则;长度小于64 个字节
+ */
+_ZJ_API int ZJ_SetAppVersion(const char* pcVersion);
+
+/**
+ * @brief 获取设备固件版本号
+ * @param 无
+ * @return 设备当前固件版本号
+ */
+_ZJ_API unsigned char* ZJ_GetAppVersion(void);
+
+/**
+ * @brief 设置SDK服务状态回调函数
+ * @param pFunSelfStatusCb 回调函数
+ * @return 0 成功 -1 失败
+ */
+_ZJ_API int ZJ_Set_SystemStatusCB(ZJ_PFUN_DEVICE_STATUS pFunSelfStatusCb);
+
+/**
+ * @brief 获取设备通过SDK从服务获取到的设备DID
+ * @param 无
+ * @return 设备DID
+ */
+_ZJ_API unsigned char* ZJ_GetDeviceId(void);
+
+/**
+ * @brief 设备按键复位接口
+ * @param uiCtrlType 操作选项 EN_ZJ_CTRLDEVICEID_TYPE
+ * @return 0 成功 -1 失败
+ */
+_ZJ_API int ZJ_CtrlDeviceId(unsigned int uiCtrlType);
+
+/**
+ * @brief 启动SDK
+ * @param 无
+ * @return 0 成功 -1 失败
+ */
+_ZJ_API int ZJ_Start(void);
+
+/**
+ * @brief 停止SDK
+ * @param 无
+ * @return 0 成功 -1 失败
+ */
+_ZJ_API int ZJ_Stop(void);
+
+/**
+ * @brief 销毁SDK实例
+ * @param 无
+ * @return 0 成功 -1 失败
+ */
+_ZJ_API int ZJ_Destroy(void);
+
+/**
+ * @brief 获取SDK服务的link地址  用于固件检测网络情况
+ * @param pucDomainHost 域名
+ * @param pucAddrIpv4 ipv4地址
+ * @param pucAddrIpv6 ipv6地址
+ * @param puiPort 端口号
+ * @param pucToken 预留参数
+ * @return 0 成功 -1 失败
+ */
+_ZJ_API int ZJ_GetLinkAddr(unsigned char **pucDomainHost,unsigned char **pucAddrIpv4, unsigned char **pucAddrIpv6, unsigned int *puiPort, unsigned char **pucToken);
+
+/**
+ * @brief 获取SDK服务的Sign地址  用于固件检测网络情况
+ * @param aucHost Sign域名
+ * @return 0 成功 -1 失败
+ */
+_ZJ_API int ZJ_GetHmServerHostAddr(unsigned char aucHost[256]);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/code/sdk/zhihui/AI/AIsdk/include/zj_type.h b/code/sdk/zhihui/AI/AIsdk/include/zj_type.h
new file mode 100644 (file)
index 0000000..49ddcc7
--- /dev/null
@@ -0,0 +1,132 @@
+#ifndef _ZJ_TYPE_H_
+#define _ZJ_TYPE_H_
+
+// #include <time.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef ZJ_EXPORTS
+#define _ZJ_API  __declspec(dllexport)
+#else
+#define _ZJ_API
+#endif
+
+#define ZJ_HANDLE   void*
+// 版本号
+#define ZJ_SDK_VERSION_NUM     0x00250718
+
+// 系统类型
+typedef enum enum_zj_os_type
+{
+    EN_ZJ_OS_TYPE_LINUX     = 1,
+    EN_ZJ_OS_TYPE_IOS       = 2,
+    EN_ZJ_OS_TYPE_ANDRIOD   = 3,
+    EN_ZJ_OS_TYPE_ANDRIODTV = 4,
+    EN_ZJ_OS_TYPE_WINDOWS   = 5,
+    EN_ZJ_OS_TYPE_RTOS      = 6
+}EN_ZJ_OS_TYPE;
+
+/*********************************************************************
+设备初始化状态。分别为:初始化、配置加载、网络初始化、注册、登录、绑定、运行。
+*********************************************************************/
+typedef enum enum_ZJ_SERVER_STATUS
+{
+    EN_ZJ_SERVER_STATUS_INIT = 0,
+    EN_ZJ_SERVER_STATUS_GETADDR,
+    EN_ZJ_SERVER_STATUS_CONNECT,    //网络连接完成
+    EN_ZJ_SERVER_STATUS_REGIST,     //设备注册
+    EN_ZJ_SERVER_STATUS_WAITBIND,   //设备等待绑定
+    EN_ZJ_SERVER_STATUS_PROCESS,    //设备完成上线
+    EN_ZJ_SERVER_STATUS_EXITGROUP   //设备解绑退组
+}EN_ZJ_SERVER_STATUS;
+
+typedef enum enum_ZJ_CFG_ITEM
+{
+    EN_ZJ_CFG_ITEM_ALL            = 0X00,
+    EN_ZJ_CFG_ITEM_DEVICE         = 0X01,
+    EN_ZJ_CFG_ITEM_INIOT          = 0X08,
+    EN_ZJ_CFG_ITEM_SYSTEM         = 0X80,
+    EN_ZJ_CFG_ITEM_GROUPINF       = 0x10000,
+}EN_ZJ_CFG_ITEM;
+
+typedef enum enum_ZJ_DEVICE_UPDATE_STATUS
+{
+    EN_ZJ_DEVICE_UPDATE_STATUS_NOUPDATE     = 0,    //不需要升级
+    EN_ZJ_DEVICE_UPDATE_STATUS_NEEDUPDATE   = 1,    //有新版本需要升级
+    EN_ZJ_DEVICE_UPDATE_STATUS_MUSTUPDATE   = 2     //强制升级,系统版本不兼容需要强制升级
+}EN_ZJ_DEVICE_UPDATE_STATUS;
+
+typedef enum enum_ZJ_NETWORK_TYPE{
+    EN_ZJ_NETWORK_TYPE_NONET                = 0x00, // 无网络
+    EN_ZJ_NETWORK_TYPE_WIRED                = 0x01, // 有线连接
+    EN_ZJ_NETWORK_TYPE_WIFI                 = 0x02, // WIFI连接
+    EN_ZJ_NETWORK_TYPE_AP                   = 0x04, // AP热点
+    EN_ZJ_NETWORK_TYPE_SIM                  = 0x08, // 移动网络
+}EN_ZJ_NETWORK_TYPE;
+
+typedef enum enum_ZJ_OTA_ABILITY{
+    EN_ZJ_OTA_ABILITY_SDCARD                = 0x01, // SD卡升级,用户将升级包拷贝到SD卡,然后将SD卡插入设备完成升级;
+    EN_ZJ_OTA_ABILITY_LOCALUPDATE           = 0x02, // 本地升级,用户与设备连接在同一个局域网,完成升级;
+    EN_ZJ_OTA_ABILITY_REMOTEUPDATE          = 0x04  // 远程升级,用户与设备不在同一个局域网,完成升级;设备需要更多的空间存放升级包;
+}EN_ZJ_OTA_ABILITY;
+
+typedef enum enum_ZJ_AUDIOENC_TYPE{
+    EN_ZJ_AUDIOENC_TYPE_PCM16       = 0x01,
+    EN_ZJ_AUDIOENC_TYPE_G711A       = 0x02,
+    EN_ZJ_AUDIOENC_TYPE_G711U       = 0x04,
+    EN_ZJ_AUDIOENC_TYPE_AAC         = 0x08,
+    EN_ZJ_AUDIOENC_TYPE_MP3         = 0x10,
+    EN_ZJ_AUDIOENC_TYPE_SVAC        = 0x20,
+    EN_ZJ_AUDIOENC_TYPE_SVAC3       = 0x40,
+}EN_ZJ_AUDIOENC_TYPE;
+
+typedef struct stru_ZJ_AUDIO_PARAM{
+    unsigned int uiEncodeType;  //编码格式 EN_ZJ_AUDIOENC_TYPE
+    unsigned int uiSampleRate;  //采样率
+    unsigned int uiChannel;     //声道数
+    unsigned int uiDepth;       //深度
+}ST_ZJ_AUDIO_PARAM;
+
+typedef enum enum_ZJ_CTRLDEVICEID_TYPE{
+    EN_ZJ_CTRLDID_NODE       = 0,
+    EN_ZJ_CTRLDID_EXITGROUP         // 设备解绑操作
+}EN_ZJ_CTRLDEVICEID_TYPE;
+
+// 设备状态回调接口; 告诉设备当前状态;
+typedef int (*ZJ_PFUN_DEVICE_STATUS)(EN_ZJ_SERVER_STATUS enDeviceStatus, int iErrCode);
+
+/****************************************************************
+升级回调函数
+***************************************************************/
+// 设备新版本回调接口,告诉设备有新版本
+// pucDwonUrl 固件包的下载地址, 地址格式: hostAddr:port/urlpath
+
+// 下载地址作为flash 覆盖失败后的补救措施, 正常不使用
+typedef int (*ZJ_PFUN_NEWVERSON_NOTICE)(unsigned char *pucNewVersion,unsigned int uiFileSize,unsigned char *pucDownUrl);
+
+// 设备镜像下载回调接口,sdk下载下来的数据通过此回调透传给设备,uiEndFlag : 1 表示下载完成   0 表示下载中  
+// uiDataType 0 固件数据 1 配置文件
+typedef int (*ZJ_PFUN_NEWVERSON_DATADOWN)(unsigned char *pucPackage,unsigned int uiPacklen,unsigned int uiEndFlag,unsigned int uiDataType);
+
+// 停止下载文件
+typedef int (*ZJ_PFUN_STOPUPGRADE)(void);
+
+// 1 解签成功,通知固件覆盖镜像、 0 解签不成功,不覆盖
+typedef int (*ZJ_PFUN_COVERIMAGE_NOTICE)(unsigned int uiCoverFlag);
+
+//日志收集回调接口,通过该接口将所有日志打包成pcDesInfo文件;
+typedef int (*ZJ_PFUN_COLLECTLOGFILES)(unsigned char *pucPeerId,unsigned int iSessionId,unsigned char *pcDesInfo);
+
+// RTOS 串口输出回调函数
+typedef int (*ZJ_PFUN_THIRDOUTPUTLOG_CB)(const char* fmt, ...);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+
+
diff --git a/code/sdk/zhihui/AI/AIsdk/lib/libcommon.a b/code/sdk/zhihui/AI/AIsdk/lib/libcommon.a
new file mode 100644 (file)
index 0000000..2caf57a
Binary files /dev/null and b/code/sdk/zhihui/AI/AIsdk/lib/libcommon.a differ
diff --git a/code/sdk/zhihui/AI/AIsdk/lib/libcos.a b/code/sdk/zhihui/AI/AIsdk/lib/libcos.a
new file mode 100644 (file)
index 0000000..59bc592
Binary files /dev/null and b/code/sdk/zhihui/AI/AIsdk/lib/libcos.a differ
diff --git a/code/sdk/zhihui/AI/AIsdk/lib/libthirdparty.a b/code/sdk/zhihui/AI/AIsdk/lib/libthirdparty.a
new file mode 100644 (file)
index 0000000..bb4215f
Binary files /dev/null and b/code/sdk/zhihui/AI/AIsdk/lib/libthirdparty.a differ
diff --git a/code/sdk/zhihui/AI/AIsyscall/CMakeLists.txt b/code/sdk/zhihui/AI/AIsyscall/CMakeLists.txt
new file mode 100644 (file)
index 0000000..d1d7eab
--- /dev/null
@@ -0,0 +1,83 @@
+#===============================================================================
+# @brief    cmake file
+# Copyright (c) @CompanyNameMagicTag 2022-2023. All rights reserved.
+#===============================================================================
+set(COMPONENT_NAME "AIsyscall")
+
+set(SOURCES
+    ${CMAKE_CURRENT_SOURCE_DIR}/src/syscall.c
+)
+
+set(PUBLIC_HEADER
+    ${CMAKE_CURRENT_SOURCE_DIR}/include
+    ${CMAKE_CURRENT_SOURCE_DIR}/..
+    ${CMAKE_CURRENT_SOURCE_DIR}/../AIsdk/include
+
+)
+set(PRIVATE_HEADER
+    ${ROOT_DIR}/open_source/openharmony/drivers/peripheral/display/interfaces/include
+    ${ROOT_DIR}/middleware/utils/update/inner_include
+    ${ROOT_DIR}/middleware/services/gui/uikit/utils/interfaces/kits
+    ${ROOT_DIR}/middleware/services/gui/uikit/utils/interfaces/innerkits
+    ${ROOT_DIR}/middleware/services/gui/uikit/proprietary/include
+    ${ROOT_DIR}/middleware/services/gui/uikit/ui/interfaces/innerkits
+    ${ROOT_DIR}/open_source/openharmony/utils/native/lite/include
+    ${ROOT_DIR}/middleware/services/gui/uikit/surface/interfaces/kits
+    ${ROOT_DIR}/open_source/openharmony/utils/native/lite/kv_store/innerkits
+    ${ROOT_DIR}/middleware/services/gui/uikit/utils/interfaces/kits/gfx_utils
+    ${ROOT_DIR}/middleware/services/media/foundation/player/interfaces/kits
+    ${ROOT_DIR}/application/wearable/nativeapp/nativeui/key/include
+    ${ROOT_DIR}/middleware/services/gui/uikit/ui/interfaces/innerkits
+    ${ROOT_DIR}/middleware/services/gui/uikit/ui/interfaces/innerkits/font
+    ${ROOT_DIR}/middleware/services/gui/uikit/ui/frameworks/font
+    ${ROOT_DIR}/middleware/services/gui/uikit/ui/frameworks
+   
+    ${ROOT_DIR}/middleware/services/gui/uikit/proprietary/src/utils/innerkits
+    ${ROOT_DIR}/zhihui/services/factorytest_service
+    ${ROOT_DIR}/zhihui/drivers/
+    ${ROOT_DIR}/zhihui/4g/cat1Service/include
+    ${ROOT_DIR}/open_source/openharmony/third_party/lwip/lwip_v2.1.3/src/include
+    ${ROOT_DIR}/open_source/openharmony/third_party/lwip/lwip_adapter/liteos/src/include
+    # /home/hcj/615/FD230/code/sdk/application/wearable/nativeapp/nativeui/player/include/PlayersPresenter.h
+    # /home/hcj/615/FD230/code/sdk/middleware/services/gui/uikit/ui/frameworks/font/glyphs_manager.h
+    # /home/hcj/615/FD230/code/sdk//UiServersMsg.h
+)
+# /home/hcj/615/FD230/code/sdk/
+
+
+set(PRIVATE_DEFINES
+    TARGET_NAME="${TARGET_COMMAND}"
+    BUILD_TIME="${BUILD_TIME}"
+)
+
+set(PUBLIC_DEFINES
+)
+
+# use this when you want to add ccflags like -include xxx
+set(COMPONENT_PUBLIC_CCFLAGS
+)
+
+set(COMPONENT_CCFLAGS
+    -Wno-error
+    -Wno-unused-parameter
+    -fno-exceptions
+    -fno-unwind-tables
+    -fno-asynchronous-unwind-tables
+    -Wno-undef
+    -Wno-bitwise-op-parentheses
+    -Wno-shift-op-parentheses
+    -nostdlibinc
+    -nostdinc
+    -nostdlib
+    -Wno-c++11-narrowing
+    -Wno-error=unused-function
+)
+set(WHOLE_LINK
+    true
+)
+
+set(MAIN_COMPONENT
+    false
+)
+
+build_component()
similarity index 99%
rename from code/sdk/zhihui/AI/syscall/src/syscall.c
rename to code/sdk/zhihui/AI/AIsyscall/src/syscall.c
index ac38f73..07fe4e4 100644 (file)
@@ -17,7 +17,7 @@
 
 #include "zj_type.h"
 #include "zj_err.h"
-#include "zj_syscall.h"
+// #include "zj_syscall.h"
 
 // ÒÔÏÂÉùÃ÷µÄϵͳµ÷Óûص÷º¯Êý¾ùÓɳ§ÉÌʵÏÖ  ³§ÉÌʵÏÖ±ê¼Ç
 /***********************************************************************************/
diff --git a/code/sdk/zhihui/AI/AIsystem/CMakeLists.txt b/code/sdk/zhihui/AI/AIsystem/CMakeLists.txt
new file mode 100644 (file)
index 0000000..437cb61
--- /dev/null
@@ -0,0 +1,82 @@
+#===============================================================================
+# @brief    cmake file
+# Copyright (c) @CompanyNameMagicTag 2022-2023. All rights reserved.
+#===============================================================================
+set(COMPONENT_NAME "AIsystem")
+
+set(SOURCES
+    ${CMAKE_CURRENT_SOURCE_DIR}/src/system.c
+)
+
+set(PUBLIC_HEADER
+    ${CMAKE_CURRENT_SOURCE_DIR}/include
+    ${CMAKE_CURRENT_SOURCE_DIR}/..
+    ${CMAKE_CURRENT_SOURCE_DIR}/../AIsdk/include
+)
+set(PRIVATE_HEADER
+    ${ROOT_DIR}/open_source/openharmony/drivers/peripheral/display/interfaces/include
+    ${ROOT_DIR}/middleware/utils/update/inner_include
+    ${ROOT_DIR}/middleware/services/gui/uikit/utils/interfaces/kits
+    ${ROOT_DIR}/middleware/services/gui/uikit/utils/interfaces/innerkits
+    ${ROOT_DIR}/middleware/services/gui/uikit/proprietary/include
+    ${ROOT_DIR}/middleware/services/gui/uikit/ui/interfaces/innerkits
+    ${ROOT_DIR}/open_source/openharmony/utils/native/lite/include
+    ${ROOT_DIR}/middleware/services/gui/uikit/surface/interfaces/kits
+    ${ROOT_DIR}/open_source/openharmony/utils/native/lite/kv_store/innerkits
+    ${ROOT_DIR}/middleware/services/gui/uikit/utils/interfaces/kits/gfx_utils
+    ${ROOT_DIR}/middleware/services/media/foundation/player/interfaces/kits
+    ${ROOT_DIR}/application/wearable/nativeapp/nativeui/key/include
+    ${ROOT_DIR}/middleware/services/gui/uikit/ui/interfaces/innerkits
+    ${ROOT_DIR}/middleware/services/gui/uikit/ui/interfaces/innerkits/font
+    ${ROOT_DIR}/middleware/services/gui/uikit/ui/frameworks/font
+    ${ROOT_DIR}/middleware/services/gui/uikit/ui/frameworks
+   
+    ${ROOT_DIR}/middleware/services/gui/uikit/proprietary/src/utils/innerkits
+    ${ROOT_DIR}/zhihui/services/factorytest_service
+    ${ROOT_DIR}/zhihui/drivers/
+    ${ROOT_DIR}/zhihui/4g/cat1Service/include
+    ${ROOT_DIR}/open_source/openharmony/third_party/lwip/lwip_v2.1.3/src/include
+    ${ROOT_DIR}/open_source/openharmony/third_party/lwip/lwip_adapter/liteos/src/include
+    # /home/hcj/615/FD230/code/sdk/application/wearable/nativeapp/nativeui/player/include/PlayersPresenter.h
+    # /home/hcj/615/FD230/code/sdk/middleware/services/gui/uikit/ui/frameworks/font/glyphs_manager.h
+    # /home/hcj/615/FD230/code/sdk//UiServersMsg.h
+)
+# /home/hcj/615/FD230/code/sdk/
+
+
+set(PRIVATE_DEFINES
+    TARGET_NAME="${TARGET_COMMAND}"
+    BUILD_TIME="${BUILD_TIME}"
+)
+
+set(PUBLIC_DEFINES
+)
+
+# use this when you want to add ccflags like -include xxx
+set(COMPONENT_PUBLIC_CCFLAGS
+)
+
+set(COMPONENT_CCFLAGS
+    -Wno-error
+    -Wno-unused-parameter
+    -fno-exceptions
+    -fno-unwind-tables
+    -fno-asynchronous-unwind-tables
+    -Wno-undef
+    -Wno-bitwise-op-parentheses
+    -Wno-shift-op-parentheses
+    -nostdlibinc
+    -nostdinc
+    -nostdlib
+    -Wno-c++11-narrowing
+    -Wno-error=unused-function
+)
+set(WHOLE_LINK
+    true
+)
+
+set(MAIN_COMPONENT
+    false
+)
+
+build_component()
similarity index 82%
rename from code/sdk/zhihui/AI/system/include/system.h
rename to code/sdk/zhihui/AI/AIsystem/include/system.h
index 9ed07d0..c0dcbb0 100644 (file)
 #define APPID          "2lKQKUjba6vXsCOW"
 #define CTEI           "YNWHMY250430CKAJ"
 #else
-// 厂商需要自己申请三码
-#define COMPANYID      "xxxxxxxxxxxxxxxx"
-#define APPID          "xxxxxxxxxxxxxxxx"
-#define CTEI           "xxxxxxxxxxxxxxxx"
+
+#define COMPANYID      "auexhqe13em49cdv"
+#define APPID          "x3rUHuYTsSOiiS5J"
+#define CTEI           "J4LHYY250825DJAO"
 #endif
 #define DEVMODEL       "TEST_AGENT_001"
 #define APPVERSION     "ZJ_ARM8852_0530_01_202004131758"
diff --git a/code/sdk/zhihui/AI/CMakeLists.txt b/code/sdk/zhihui/AI/CMakeLists.txt
new file mode 100644 (file)
index 0000000..62370a0
--- /dev/null
@@ -0,0 +1,5 @@
+add_subdirectory_if_exist(AIsystem)
+add_subdirectory_if_exist(AIagent)
+add_subdirectory_if_exist(AIota)
+add_subdirectory_if_exist(AIsdk)
+add_subdirectory_if_exist(AImain)
index 2ad2f14..0f60184 100644 (file)
@@ -9,6 +9,7 @@ add_subdirectory_if_exist(utilscpp)
 add_subdirectory_if_exist(drivers)
 add_subdirectory_if_exist(config)
 add_subdirectory_if_exist(UI)
+add_subdirectory_if_exist(AI)
 
 if("TEST_4G_SDK" IN_LIST DEFINES)
     add_subdirectory_if_exist(4gsdk)
index 7b34ee4..4bf6d96 100644 (file)
@@ -621,6 +621,7 @@ typedef struct bleInstruct
     void (*ble_connect_ok)(void);
 
     void (*ble_disconnect_ok)(void);
+    
     void (*hand_watch_first_time_Paired)(void);
 
     bool (*ble_bin_install)(const char * data);
index 3e07c67..a7c19cf 100644 (file)
@@ -45,6 +45,7 @@ set(PRIVATE_HEADER
     ${ROOT_DIR}/middleware/services/gui/uikit/ui/frameworks/dock/
     ${ROOT_DIR}/zhihui/UI/producttest/include
     ${ROOT_DIR}/zhihui/UI
+    ${ROOT_DIR}/zhihui/AI/AImain
 )
 
 if("FD230" IN_LIST DEFINES)
index 67ff689..aff8541 100644 (file)
@@ -959,6 +959,7 @@ static uint32_t PBAP_LS(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
 #endif
 
 
+
 static uint32_t BLE_TEST(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
 {
      UNUSED(strCommonCmd);
@@ -1055,6 +1056,40 @@ static uint32_t BLE_TEST(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
      printf("BLE_TEST END \n");
     return ERRCODE_SUCC;
 }
+#include "uapi_ai_function.h"
+
+
+static uint32_t AI_TEST(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
+{
+     UNUSED(strCommonCmd);
+     uint8_t argv[CUSTOM_UTILS_MAX_ARGC][CUSTOM_UTILS_MAX_ARGV_LEN] = {0};
+    uint32_t argc = 0;
+
+    int ret = ConvertCmdToParam(para, paraLen, argv, &argc);
+    if (ret != CUSTOM_UTILS_SUCCESS)
+    {
+        wstp_print("CUSTOM_UTILSTEST ATCMD Convert Command Failed\n");
+        return ERRCODE_FAIL;
+    }
+     printf("BLE_TEST \n");
+
+     uint8_t type =atoi( (char *)argv[0]);
+    //  uint8_t type_2= atoi( (char *)argv[1]);
+    
+    switch (type)
+    {
+    case 0:
+        uapi_CT_ai_init();
+        break;
+    
+    default:
+        break;
+    }
+     printf("BLE_TEST END \n");
+    return ERRCODE_SUCC;
+}
+
+
 
 static uint32_t custom_volume_test(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
 {
@@ -1490,6 +1525,8 @@ static const at_cmd_table_t g_custom_utils_cmd[] = {
     { (char *)"AT^AUTOOTACHECK",      send_check_ota_atuoota, (char *)" " },
     { (char *)"AT^POWEROFF",      custom_at_poweroff, (char *)" " },
     { (char *)"AT^GPIO",      custom_at_gpio, (char *)" " },
+    { (char *)"AT^AITEST",      AI_TEST, (char *)" " },
+    
 };