${CMAKE_CURRENT_SOURCE_DIR}/cat1_ctl.cpp
${CMAKE_CURRENT_SOURCE_DIR}/cat_imei_map.cpp
${CMAKE_CURRENT_SOURCE_DIR}/cat1_ws.cpp
+${CMAKE_CURRENT_SOURCE_DIR}/cat1_ai_server.cpp
// #include "aic_osa.h"\r
// #include <bits/types.h>\r
// WebSocket 消息类型枚举\r
+\r
+#ifdef __cplusplus\r
+#if __cplusplus\r
+extern "C" {\r
+#endif /* __cplusplus */\r
+#endif /* __cplusplus */\r
+\r
typedef enum {\r
WS_CONT = 0x00,\r
WS_TEXT = 0x01,\r
WebSocketClient *init_websocket_client(const char *url, const char *headers,uint8_t use_dns);\r
\r
// 关闭 WebSocket 客户端\r
-void close_websocket_client(WebSocketClient *client) ;\r
+void lwip_close_websocket_client(WebSocketClient *client) ;\r
\r
// 接收 WebSocket 消息\r
int receive_websocket_message(WebSocketClient *client, unsigned char *buf,int len,WebSocketMessageType *code);\r
+int send_websocket_message(WebSocketClient *client, uint8_t *message, size_t message_len, WebSocketMessageType type) ;\r
+\r
+\r
+#ifdef __cplusplus\r
+#if __cplusplus\r
+}\r
+#endif /* __cplusplus */\r
+#endif /* __cplusplus */\r
\r
// 发送 WebSocket 消息\r
// int send_websocket_message(WebSocketClient *client, uint8_t *message, size_t message_len, WebSocketMessageType type) ;\r
--- /dev/null
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <string.h>
+#include <strings.h>
+
+#include <dirent.h>
+#include "lwip/ip.h"
+#include "lwip/netif.h"
+#include "lwip/init.h"
+#include "lwip/inet_chksum.h"
+#include "lwip/dns.h"
+#include "lwip/err.h"
+#include "lwip/sockets.h"
+#include "lwip/sys.h"
+#include <lwip/netdb.h>
+// #include <netinet/in.h>
+#include "lwip/inet.h"
+#include <stdio.h>
+// #include <string.h>
+// #include <sys/param.h>
+#include <string.h>
+
+#include "../../../../../open_source/openharmony/third_party/cJSON/cJSON.h"
+#include "ConfigModelC.h"
+#include "ConfigModel.h"
+#include "wearable_log.h"
+#include "custom_runtime.h"
+#include "osal_timer.h"
+#include "lwip/apps/sntp.h"
+
+#include <sys/time.h>
+
+#include "bletest.h"
+#include "custom_utils.h"
+#include "custom_runtime.h"
+#include "bleANCS.h"
+#include "cat1_tcpServer.h"
+#include "custom_utils.h"
+#include "broadcast_feature.h"
+#include "cmsis_os2.h"
+#include "cat1_ctl.h"
+#include "voice_call_volte_sample_wrapper.h"
+
+#include "audio_capture_wrapper.h"
+#include <ui_service.h>
+#include <bleService.h>
+#include "cat1_ws.h"
+#include "dev_authentication.h"
+#include "bk_websocket.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include "bk_websocket.h"
+
+#include <stdint.h>
+#include <stdint.h>
+#include <asm/delay.h>
+
+
+extern bool read_dev_token(char *data_token);
+
+static osTimerId_t g_timer_time_sync = NULL;
+
+void uapi_start_tts_single_txt(char *buf);
+
+void uapi_start_tts_single(void);
+
+
+errcode_t asr_server_init(void);
+
+
+static uint8_t server_state=0;
+
+static uint8_t disconnect_server=0;
+// free
+
+
+
+char *asr_recv_buf=NULL;//[1024]={0};
+WebSocketClient *asr_client=NULL;
+
+int32_t uapi_tts_paly_init(void);
+
+int32_t uapi_tts_paly_stop(void);
+
+uint32_t bk_websocket_tts_tick=0;
+
+uint8_t tts_reconnect=0;
+
+uint8_t asr_need_stop=0;
+
+
+char recv_buf[1024]={0};
+
+WebSocketClient *chat_client=NULL;
+
+
+WebSocketClient *tts_client=NULL;
+
+
+errcode_t chat_server_init(void);
+
+errcode_t tts_server_init(void);
+
+// void tts_server_deinit(void);
+uint8 tts_break =0;
+
+void uapi_set_tts_break(uint8_t data)
+{
+ tts_break=data;
+}
+
+uint8_t uapi_get_tts_break(void)
+{
+ return tts_break;
+}
+
+char result_str_asr[256]={0};
+
+
+static uint8_t type_ai=0;
+
+uint8_t chat_reconnect=0;
+
+void uapi_UI_start_asr(uint8_t type)
+{
+ memset_s(result_str_asr,256,0,256);
+ // uapi_stop_tts();
+
+
+ if(type_ai!=type)
+ {
+ type_ai=type;
+ if(chat_client)
+ {
+ chat_server_deinit();
+ chat_reconnect=1;
+ }
+ }
+
+
+ /////////////////////////////////////////////////////
+
+ tts_break=1;
+ tts_server_deinit();
+ tts_reconnect=1;
+
+ AIStreamFlush();
+ send_msg_data_into_Ai_msg_queue((uint8_t *)"tts_recv_buf",13,201);
+
+
+ asr_need_stop=0;
+
+ asr_server_init();
+
+ if(chat_client==NULL)
+ {
+ chat_server_init();
+ }
+ if(tts_client==NULL)
+ {
+ tts_server_init();
+ }
+
+
+}
+
+
+void uapi_UI_stop_start_asr_timeout(void)
+{
+ asr_need_stop=1;
+}
+
+void uapi_UI_stop_asr(void)
+{
+ if(stop_AudioCaptureProcess_AI())
+ {
+ // if(strlen(result_str_asr))
+ // {
+ // send_ai_txt(0,result_str_asr);
+ // memset_s(result_str_asr,256,0,256);
+ // }
+
+ }
+}
+
+
+
+
+bool send_ai_txt(uint8_t type,char *msg)
+{
+ cJSON* dataJSON = cJSON_CreateObject();
+
+ if (dataJSON == NULL) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"Error creating JSON object\n");
+ return false;
+ }
+
+
+ cJSON_AddStringToObject(dataJSON,"type","jiutian-lan");
+
+ cJSON_AddStringToObject(dataJSON,"content",msg);
+
+ char *jsonString = cJSON_PrintUnformatted(dataJSON);
+
+ if (jsonString == NULL) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"Error printing JSON to string\n");
+ cJSON_Delete(dataJSON);
+ return false;
+ }
+
+ uint32_t data_len = strlen(jsonString);
+ cJSON_Delete(dataJSON);
+
+ if (data_len == 0) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"Error: JSON string length is 0\n");
+ cJSON_free(jsonString);
+ return false;
+ }
+
+ if (send_websocket_message(chat_client,( uint8_t *)jsonString,strlen(jsonString),WS_TEXT)==0)
+{
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message succ 0\n");
+ cJSON_free(jsonString);
+ return true;
+ }
+
+ else
+ {
+ if(chat_client==NULL)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"chat_client is NULL\n");
+ }
+ cJSON_free(jsonString);
+ return false;
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message fail\n");
+ }
+
+
+}
+
+
+
+// {"type":"middle","content":"我是","task_id":"","reasoning_content":""}
+// char content_str_chat[64]={0};
+
+bool chat_result_analysis(char *buf)
+{
+ cJSON* root = cJSON_Parse((const char *)buf);
+ if (root == NULL) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"解析失败\n");
+ return false;
+ }
+ char *type_str=NULL;
+ char *content_str=NULL;
+
+ cJSON* type = cJSON_GetObjectItem(root, "type");
+ if (type && cJSON_IsString(type)) {
+
+ type_str= type->valuestring;
+ }
+ cJSON* content = cJSON_GetObjectItem(root, "content");
+ if (content && cJSON_IsString(content)) {
+ content_str = content->valuestring;
+ }
+ if(strcmp("middle",type_str)==0)
+ {
+ if(strlen(content_str)>0)
+ {
+ // memset_s(content_str_chat,64,0,64);
+ // memcpy_s(content_str_chat,64,content_str,strlen(content_str));
+ char *content_str_chat = (char *)malloc(strlen(content_str)+1);
+ strcpy(content_str_chat,content_str);
+ ble_set_ai_Answer_str(content_str_chat,2);
+ // uapi_start_tts_single_txt(content_str_chat);
+ // static uint8_t test=1;
+ // if(test)
+ // {
+ // uapi_start_tts_single();
+ // test=0;
+
+ // }
+ free(content_str_chat);
+ }
+ }
+ if(strcmp("end",type_str)==0)
+ {
+ char end_str_chat[128]={0};
+
+ if(strlen(content_str)>0)
+ {
+ memset_s(end_str_chat,128,0,128);
+ memcpy_s(end_str_chat,128,end_str_chat,strlen(end_str_chat));
+ ble_set_ai_Answer_str(end_str_chat,2);
+ }
+
+ }
+
+
+ cJSON_Delete(root);
+ return true;
+}
+
+bool chat_ws_url_init(char * put_buf,uint8_t type)
+{
+ char token[64]={0};
+ if(read_dev_token(token))
+ {
+ sprintf(put_buf,"ws://amp.raisound.com/chat/ws?dt=%s&platform=chinamobiledevice&bot_type=jiutian-lan",token);
+
+ if(type_ai==AI_TYPE_JIU)
+ {
+ sprintf(put_buf,"ws://amp.raisound.com/chat/ws?dt=%s&platform=chinamobiledevice&bot_type=jiutian-lan",token);
+ }
+ else if(type_ai==AI_TYPE_DOU)
+ {
+ sprintf(put_buf,"ws://amp.raisound.com/chat/ws?dt=%s&platform=huoshan",token,0);
+ }
+ else if(type_ai==AI_TYPE_WEN)
+ {
+ sprintf(put_buf,"ws://amp.raisound.com/chat/ws?dt=%s&platform=baidu",token);
+ }
+ else if(type_ai==AI_TYPE_KIMI)
+ {
+ sprintf(put_buf,"ws://amp.raisound.com/chat/ws?dt=%s&platform=moonshot",token);
+ }
+ else if(type_ai==AI_TYPE_DE)
+ {
+ sprintf(put_buf,"ws://amp.raisound.com/chat/ws?dt=%s&platform=huoshan&model=ep-20250206162546-g74w6",token);
+ }
+ else
+ {
+ sprintf(put_buf,"ws://amp.raisound.com/chat/ws?dt=%s&platform=aliyun",token);
+ }
+ return true;
+
+ }
+ else
+ {
+ return false;
+ }
+
+}
+
+uint8_t is_bk_websocket_chat=0;
+static uint8_t ai_asr_service_init_flag = 0; //asr初始化标志
+static uint8_t ai_chat_service_init_flag = 0; //chat初始化标志
+static uint8_t ai_tts_server_init_flag = 0; //tts初始化标志
+// 获取ASR服务初始化标志
+uint8_t get_ai_asr_service_init_flag(void)
+{
+ return true;
+}
+
+// 设置ASR服务初始化标志
+void set_ai_asr_service_init_flag(uint8_t flag)
+{
+ ai_asr_service_init_flag = flag;
+}
+
+// 获取Chat服务初始化标志
+uint8_t get_ai_chat_service_init_flag(void)
+{
+ return ai_chat_service_init_flag;
+}
+
+// 设置Chat服务初始化标志
+void set_ai_chat_service_init_flag(uint8_t flag)
+{
+ ai_chat_service_init_flag = flag;
+}
+
+// 获取tts服务初始化标志
+uint8_t get_ai_tts_server_init_flag(void)
+{
+ return ai_tts_server_init_flag;
+}
+// 设置tts服务初始化标志
+void set_ai_tts_server_init_flag(uint8_t flag)
+{
+ ai_tts_server_init_flag = flag;
+}
+
+uint8_t get_bk_websocket_tts_tick(void)
+{
+ return bk_websocket_tts_tick;
+}
+
+void bk_websocket_demo(void *data) {
+
+ // while (1)
+ {
+ /* code */
+ char_reconnet:
+ is_bk_websocket_chat=1;
+
+ char url_buf[124]={0};
+ uint8_t is_raisound_url=0;
+
+ if(chat_ws_url_init(url_buf,type_ai))
+ {
+ printf("%s\r\n",url_buf);
+ is_raisound_url=1;
+ }
+ else
+ {
+ is_raisound_url=0;
+ }
+ uint8_t client_count=3;
+
+ while (client_count)
+ {
+ // http://118.145.158.207:22080ws://118.145.158.207:22080/chat/ws
+ // ws://amp.raisound.com/chat/ws?dt=%s&platform=chinamobiledevice&bot_type=jiutian-lan
+ // type_ai=AI_TYPE_DE;
+ if(is_raisound_url)
+ {
+ chat_client = init_websocket_client(url_buf,NULL,1);
+ }
+ else
+ {
+ if(type_ai==AI_TYPE_JIU)
+ {
+ chat_client = init_websocket_client("ws://118.145.158.207:22080/chat/ws?&platform=chinamobiledevice&bot_type=jiutian-lan",NULL,0);
+ }
+ else if(type_ai==AI_TYPE_DOU)
+ {
+ chat_client = init_websocket_client("ws://118.145.158.207:22080/chat/ws?&platform=huoshan",NULL,0);
+ }
+ else if(type_ai==AI_TYPE_WEN)
+ {
+ chat_client = init_websocket_client("ws://118.145.158.207:22080/chat/ws?&platform=baidu",NULL,0);
+ }
+ else if(type_ai==AI_TYPE_KIMI)
+ {
+ chat_client = init_websocket_client("ws://118.145.158.207:22080/chat/ws?&platform=moonshot",NULL,0);
+ }
+ else if(type_ai==AI_TYPE_DE)
+ {
+ chat_client = init_websocket_client("ws://118.145.158.207:22080/chat/ws?platform=huoshan&model=ep-20250206162546-g74w6",NULL,0);
+ }
+ else
+ {
+ chat_client = init_websocket_client("ws://118.145.158.207:22080/chat/ws?&platform=aliyun",NULL,0);
+ }
+ }
+
+
+
+ if (chat_client== NULL) {
+ client_count--;
+ msleep(1000);
+ continue ;
+ }
+ else
+ {
+ break;
+ }
+ }
+ if (chat_client== NULL){
+ is_bk_websocket_chat=0;
+ return;
+ }
+
+ server_state=0x02^server_state;
+ if(server_state==0b00000111)
+ {
+ // uapi_start_asr();
+ // uapi_start_tts_single_txt("2025英超夏季转会窗分阶段开启第一阶段2025年6月1日至2025年6月11日凌晨2:00北京时间第二阶段常规夏窗2025年6月16日至2025年9月2日凌晨2:00北京时间本贴将持续更新2025年夏窗以曼联转会相关为主的新闻和消息。");
+ }
+
+
+ // send_ai_txt(1,"你是谁");
+
+ set_ai_chat_service_init_flag(1);
+ WebSocketMessageType type;
+ while (disconnect_server==0)
+ {
+ memset_s(recv_buf,1024,0,1024);
+ int len= receive_websocket_message(chat_client,(unsigned char *)recv_buf,1024,&type);
+ if(len==-1 || type == WS_CLOSE)
+ {
+ break;
+ }
+ chat_result_analysis(recv_buf);
+ printf("bk_websocket_demo %s",recv_buf);
+ }
+
+ set_ai_chat_service_init_flag(0);
+ lwip_close_websocket_client(chat_client);
+ chat_client=NULL;
+
+ if(chat_reconnect==1)
+ {
+ chat_reconnect=0;
+ goto char_reconnet;
+ }
+ is_bk_websocket_chat=0;
+ return ;
+ }
+}
+
+
+#include "osal_msgqueue.h"
+#include "thread_init.h"
+#include "soc_osal.h"
+#include "common_def.h"
+#include "los_printf.h"
+#include <aivoice/include/AiVoiceModelC.h>
+
+#define CAT1_SERVICE_TASK_SIZE (2048)
+#define CAT1_SERVICE_TASK_PRIO 5
+
+
+
+
+
+
+errcode_t chat_server_init(void)
+{
+ if(chat_client || is_bk_websocket_chat)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"cat1_tcp_server_init is connet!\r\n");
+ return ERRCODE_FAIL;
+ }
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"cat1_tcp_server_init !\r\n");
+ app_task_definition_t taskcfg={0};
+ taskcfg.create_queue_handle = NULL;
+ taskcfg.attr.name="chat_server_init";
+ taskcfg.attr.priority = TASK_PRIORITY_APP;
+ taskcfg.attr.stack_size = 0x1000;
+ taskcfg.func = bk_websocket_demo;
+ taskcfg.use_mem = USE_EXTEND_MEM;
+
+ errcode_t ret=uapi_create_osThread_custom(&taskcfg);
+
+
+ if(ret != ERRCODE_SUCC)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"create cat1_service_file failed %d!\r\n",ret);
+ return ERRCODE_FAIL;
+ }
+ return ERRCODE_SUCC;
+}
+
+
+/////////////////////////////////////////////asr///////////////
+
+// http://118.145.158.207:22080ws://amp.raisound.com/asr/ws
+
+
+
+
+//查询是否可以对话
+void uapi_start_asr(void)
+{
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"查询uapi_start_asr是否可用\n");
+
+ char *jsonString = "{\"header\":{\"event\":\"StartTranscription\",\"trace_id\": \
+ \"3fa6b9e6a30b407ea38ad7ae69e6c291\"},\"payload\":{\"format\":\"MP3\",\"sample_rate\":16000}}";
+
+ if (send_websocket_message(asr_client,( uint8_t *)jsonString,strlen(jsonString),WS_TEXT)==0)
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message succ 0\n");
+ else
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message erro\n");
+ }
+
+}
+
+void uapi_start_asr_task(void)
+{
+
+ do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AI_SEND_TEST, nullptr, 0);
+
+}
+
+
+
+//停止对话
+void uapi_stop_asr(void)
+{
+ char *jsonString ="{\"header\":{\"event\":\"StopTranscription\",\"trace_id\":\"3fa6b9e6a30b407ea38ad7ae69e6c291\"}}";
+
+ if (send_websocket_message(asr_client,( uint8_t *)jsonString,strlen(jsonString),WS_TEXT)==0)
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message succ 0\n");
+ else
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message erro\n");
+ }
+}
+
+
+
+void send_ai_bin(uint8_t *buf,uint32_t len)
+{
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_ai_bin %d\n",len);
+
+ if (send_websocket_message(asr_client,( uint8_t *)buf,len,WS_BINARY)==0)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message succ 0\n");
+ msleep(100);
+ }
+ else
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message fail 0\n");
+ }
+
+}
+
+void record_test(void)
+{
+ char buf[1024]={0};
+ msleep(1000);
+
+ FILE *fp=fopen("/user/aiRecord.bin","rb+");
+ int read_size;
+ int read_size_num=0;
+ uint32_t pack=1024;
+
+ if(fp==NULL)
+ {
+ return;
+ }
+ do
+ {
+ memset_s(buf,1024,0,1024);
+ read_size=fread(buf,1,pack,fp);
+
+ if(read_size!=0)
+ {
+ send_msg_data_into_Ai_msg_queue((void *)buf,(uint16_t)read_size,0);
+ read_size_num+=read_size;
+
+ }
+
+ } while (read_size==pack);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"record_test %d\n",read_size_num);
+ fclose(fp);
+}
+
+// {"status":20000000,"msg":"success","task_id":"80228c9f62821ffe3f867e1a5042d887","event":"TranscriptionStarted","result":null}
+// {"status":20000000,
+// "msg":"success","task_id":"e8274ed1efb60d8146c076a847d7b71a",
+// "event":"SentenceEnd","result":{"result":"你好你好你好你好。",
+// "is_end":true,"sentence_id":"fcb889fe74a0920efe14939de2fd2b1b",
+// "start_time":760,"end_time":2280}}
+void asr_record_test(void)
+{
+ // uapi_start_asr();
+ msleep(500);
+ record_test();
+ msleep(500);
+ uapi_stop_asr();
+}
+
+
+
+uint8_t asr_is_start=0;
+
+bool aer_result_analysis(char *buf)
+{
+ cJSON* root = cJSON_Parse((const char *)buf);
+ if (root == NULL) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"解析失败\n");
+ return false;
+ }
+ char *result_str=NULL;
+ int start_time_int=0;
+ int end_time_int=0;
+ bool is_end_bool=false;
+ char *event_str=NULL;
+
+ cJSON* event = cJSON_GetObjectItem(root, "event");
+ if (event && cJSON_IsString(event)) {
+ event_str= event->valuestring;
+
+ }
+
+ cJSON* result = cJSON_GetObjectItem(root, "result");
+ if (result)
+ {
+ cJSON* result_ = cJSON_GetObjectItem(result, "result");
+
+ if (result_ && cJSON_IsString(result_)) {
+ result_str= result_->valuestring;
+ }
+ cJSON* start_time = cJSON_GetObjectItem(result, "start_time");
+ if (start_time && cJSON_IsNumber(start_time)) {
+
+ start_time_int = root->valueint;
+ }
+ cJSON* end_time = cJSON_GetObjectItem(result, "end_time");
+ if (end_time && cJSON_IsNumber(end_time)) {
+ end_time_int = end_time->valueint;
+ }
+
+ cJSON* is_end = cJSON_GetObjectItem(result, "is_end");
+ if (is_end && cJSON_IsBool(is_end)) {
+ is_end_bool = is_end->valueint;
+ }
+ }
+
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"str %s start %d end %d is end %d\n",result_str,start_time_int,end_time_int,is_end_bool);
+
+ if(is_end_bool==true)
+ {
+ memset_s(result_str_asr,256,0,256);
+ memcpy_s(result_str_asr,256,result_str,strlen(result_str));
+ SendMsgToUIService(UI_AI_JUMP_TO_RESULT_VIEW, 0, nullptr, 0);//先跳转到结果界面
+
+ ble_set_ai_Question_str(result_str_asr);
+ // stop_AudioCaptureProcess_AI();
+ send_ai_txt(0,result_str_asr);
+
+ }
+ if(strcmp(event_str,"TranscriptionStarted")==0) //可以对话了,切换到聆听界面
+ {
+ //查询结果
+ startAudioCaptureTask();
+ // {
+ // //上传文件
+ // }
+
+ bool state = true;
+ SendMsgToUIService(UI_AI_JUMP_TO_LISTENING_VIEW, 0, &state, sizeof(bool));
+
+ }
+ if(strcmp(event_str,"TranscriptionCompleted")==0) //asr 结束
+ {
+ return false;
+ }
+ if(strcmp(event_str,"Failed")==0)
+ {
+ stop_AudioCaptureProcess_AI();
+ return false;
+ }
+
+ cJSON_Delete(root);
+ return true;
+
+
+}
+
+uint8_t is_bk_websocket_asr=0;
+
+// ws://amp.raisound.com/asr/ws?dt=95fc6dcdf5a3e9a48df535453efd097c19&platform=aliyun
+
+
+bool asr_ws_url_init(char * put_buf)
+{
+ char token[64]={0};
+ if(read_dev_token(token))
+ {
+ sprintf(put_buf,"ws://amp.raisound.com/asr/ws?dt=%s&platform=aliyun",token);
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+}
+
+const char* ws_test_server_url="ws://118.145.158.207:22080/asr/ws";
+const char* ws_snicker_test_server_url="ws://110.42.224.129:8910/asr/ws";
+
+int g_test_server_index = 0; //0 正式版本, 1 测试版本, 2 Snicker 服务器测试版本
+
+static int asr_client_ping=0;
+
+int asr_client_sockfd_last_id=-1;
+
+void asr_server_deinit(void);
+
+
+void bk_websocket_asr(void *data) {
+
+ // while (1)
+
+ WebSocketMessageType type;
+ bool state = true;
+
+ is_bk_websocket_asr=1;
+ uint8_t is_raisound_url=0;
+ // while (1)
+ {
+ char url_buf[124]={0};
+ // if (g_test_server_index==0)
+ {
+ //ws://amp.raisound.com/asr/ws
+ if(asr_ws_url_init(url_buf))
+ {
+ // printf("%s\r\n",url_buf);
+ is_raisound_url=1;
+ }
+ else
+ {
+ // return;
+ is_raisound_url=0;
+ }
+ }
+
+
+ uint8_t client_count=3;
+
+ while (client_count && asr_need_stop==0)
+ {
+ if (g_test_server_index == 1)
+ {
+ asr_client = init_websocket_client("ws://118.145.158.207:22080/asr/ws",NULL,0);
+
+ }else if (g_test_server_index == 2)
+ {
+ asr_client = init_websocket_client("ws://110.42.224.129:8910/asr/ws",NULL,0);
+
+ }else{
+ if(is_raisound_url)
+ asr_client = init_websocket_client(url_buf,NULL,1);
+ else
+ asr_client = init_websocket_client("ws://118.145.158.207:22080/asr/ws",NULL,0);
+
+ }
+ if (asr_client== NULL) {
+ printf("init_websocket_client fail %d\r\n",client_count);
+ client_count--;
+ msleep(1000);
+ continue ;
+ }
+ else
+ {
+ break;
+ }
+ }
+
+ asr_need_stop=0;
+
+ if (asr_client== NULL){
+
+ bool state = false;
+ SendMsgToUIService(UI_AI_JUMP_TO_LISTENING_VIEW, 0, &state, sizeof(bool));
+ is_bk_websocket_asr=0;
+ return;
+ }
+
+ uapi_cat1_keep_wakeup(1);
+
+ server_state=0x01^server_state;
+ if(server_state==0b00000111)
+ {
+ // uapi_start_asr();
+ // uapi_start_tts_single_txt("2025英超夏季转会窗分阶段开启第一阶段2025年6月1日至2025年6月11日凌晨2:00北京时间第二阶段常规夏窗2025年6月16日至2025年9月2日凌晨2:00北京时间本贴将持续更新2025年夏窗以曼联转会相关为主的新闻和消息。");
+ }
+
+ asr_recv_buf=(char *)malloc(0x400);
+ set_ai_asr_service_init_flag(1);
+
+ if(osTimerIsRunning(g_timer_time_sync)==0 )
+ {
+ osStatus_t ret = osTimerStart(g_timer_time_sync,5000*3);
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_MAIN_SERVICE,"cat1 restart_time_sync timer ret %d\n",ret);
+ }
+
+ // uapi_start_asr();
+ // SendMsgToUIService(UI_4G_AI_INIT_STAUS, 0,&state, sizeof(bool));
+
+ int sndbuf_len = 1024*5;
+ lwip_setsockopt(asr_client->sockfd, SOL_SOCKET, SO_SNDBUF, &sndbuf_len, sizeof(sndbuf_len));
+
+ uapi_start_asr();
+
+ // asr_server_deinit();
+
+ while (disconnect_server==0)
+ {
+ memset_s(asr_recv_buf,1024,0,1024);
+ int len= receive_websocket_message(asr_client,(unsigned char *)asr_recv_buf,1024,&type);
+ // if(type==WS_CONT ||
+ printf(" bk_websocket_asr type %d len %d\r\n",type,len);
+ printf("bk_websocket_demo %s %d\n",asr_recv_buf,type);
+
+ if( type==WS_CLOSE || len==-1)
+ {
+ printf("WS_lwip_close bk_websocket_asr\r\n");
+
+ if (len>2&& type==WS_CLOSE)
+ {
+ printf("WS_CLOSE reason %s\n",asr_recv_buf+2);
+ }
+ break;
+ }
+ if(type==WS_TEXT)
+ {
+ if(false== aer_result_analysis(asr_recv_buf))
+ {
+ printf("WS_lwip_close false== aer_result_analysis(asr_recv_buf)\r\n");
+ break;
+ }
+ }
+ if(type==WS_PONG)
+ {
+ asr_client_ping=0;
+ }
+ }
+
+ set_ai_asr_service_init_flag(0);
+ free(asr_recv_buf);
+
+ lwip_close_websocket_client(asr_client);
+ asr_client=NULL;
+
+ asr_client_ping=0;
+ msleep(1000);
+ // return;
+ }
+ is_bk_websocket_asr=0;
+
+
+}
+
+
+
+errcode_t asr_server_init(void)
+{
+ if(is_bk_websocket_asr || asr_client!=NULL)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"cat1_tcp_server_init is connet!\r\n");
+ return ERRCODE_FAIL;
+ }
+
+
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"asr_server_init !\r\n");
+ app_task_definition_t taskcfg={0};
+ taskcfg.create_queue_handle = NULL;
+ taskcfg.attr.name="asr_server_init";
+ taskcfg.attr.priority = TASK_PRIORITY_APP;
+ taskcfg.attr.stack_size = 0x1000;
+ taskcfg.func = bk_websocket_asr;
+ taskcfg.use_mem = USE_EXTEND_MEM;
+
+ errcode_t ret=uapi_create_osThread_custom(&taskcfg);
+
+
+ if(ret != ERRCODE_SUCC)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"create cat1_service_file failed %d!\r\n",ret);
+ return ERRCODE_FAIL;
+ }
+ return ERRCODE_SUCC;
+}
+/////////////////////////////////////////////tts接口////////////////////////////////////////////
+
+bool tts_ws_url_init(char * put_buf)
+{
+ char token[64]={0};
+ if(read_dev_token(token))
+ {
+ // /tts/stream?audio_buffer_size=1024
+ sprintf(put_buf,"ws://amp.raisound.com/tts/stream?dt=%s&platform=aliyun&noCache=1",token);
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+
+}
+
+
+
+
+void uapi_start_tts(void)
+{
+ char *jsonString =
+ "{\"header\": \
+ { \"event\": \"StartSynthesis\",\
+ \"trace_id\": \"3fa6b9e6a30b407ea38ad7ae69e6c291\"},\
+ \"payload\": \
+ {\"voice\":\"xiaoyun\",\
+ \"format\":\"mp3\",\
+ \"sample_rate\":16000,\
+ \"volume\":80,\
+ \"speech_rate\":0}\
+ }";
+
+ printf("uapi_start_tts : %s\r\n",jsonString);
+
+ if (send_websocket_message(tts_client,( uint8_t *)jsonString,strlen(jsonString),WS_TEXT)==0)
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message succ 0\n");
+}
+
+
+void uapi_stop_tts(void)
+{
+ char *jsonString =
+ " { \
+ \"header \": { \
+ \"event\": \"StopSynthesis\", \
+ \"trace_id\": \" 3fa6b9e6a30b407ea38ad7ae69e6c291 \" \
+ } \
+ } ";
+
+ printf("uapi_start_tts : %s\r\n",jsonString);
+
+ if (send_websocket_message(tts_client,( uint8_t *)jsonString,strlen(jsonString),WS_TEXT)==0)
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message succ 0\n");
+}
+
+
+
+void uapi_start_tts_single(void)
+{
+ char *jsonString =
+ " { \"header\": { \
+ \"event\": \"LongTextStream\",\
+ \"trace_id\": \"3fa6b9e6a30b407ea38ad7ae69e6c291\" \
+ }, \
+ \"payload\": { \
+ \"voice\":\"xiaoyun\", \
+ \"format\":\"pcm\", \
+ \"sample_rate\":16000, \
+ \"volume\":50, \
+ \"speech_rate\":0, \
+ \"text\":\"深圳市北科瑞声科技股份有限公司,是由国家重大人才计划特聘专家刘轶博士创办的国内人 \
+ 工智能音频领军企业,专注于行业智能音频交互技术,拥有全链条核心自主知识产权,汇集世界一流的研发运营团队。\" \
+ } } ";
+
+ printf("uapi_start_tts : %s\r\n",jsonString);
+
+ if (send_websocket_message(tts_client,(uint8_t *)jsonString,strlen(jsonString),WS_TEXT)==0)
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message succ 0\n");
+}
+
+
+ void uapi_start_tts_single_txt(char *buf)
+{
+
+
+ char *jsonString = (char *)malloc(strlen(buf)+300);// [512] ={0};
+
+ sprintf(jsonString,
+
+ // " {\" header\" : { \
+ // \"event\": \" RunSynthesis\", \
+ // \"trace_id \": \" 3fa6b9e6a30b407ea38ad7ae69e6c291 \" \
+ // }, \
+ // \"payload \": { \
+ // \"text \":\" %s \" \
+ // }}"
+
+ " { \"header\": { \
+ \"event\": \"LongTextStream\", \
+ \"trace_id\": \"3fa6b9e6a30b407ea38ad7ae69e6c291\"\
+ },\
+ \"payload\": {\
+ \"voice\":\"xiaoyun\",\
+ \"format\":\"mp3\",\
+ \"sample_rate\":16000,\
+ \"volume\":80,\
+ \"speech_rate\":0,\
+ \"text\":\"%s\"\
+ } } "
+
+ ,buf);
+
+ printf("uapi_start_tts : %s\r\n",jsonString);
+
+ if (send_websocket_message(tts_client,( uint8_t *)jsonString,strlen(jsonString),WS_TEXT)==0)
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message succ 0\n");
+
+ free(jsonString);
+ }
+
+// char *tts_txt_str=
+
+
+void send_tts_txt(char *msg)
+{
+ char *jsonString =
+ "{ \
+ \"header\": { \
+ \"event\": \"RunSynthesis\", \
+ \"trace_id\": \"3fa6b9e6a30b407ea38ad7ae69e6c291\"\
+ }, \
+ \"payload\": { \
+ \"text\":\"深圳市北科瑞声科技股份有限公司,是由国家重大人才计划特聘专家刘轶博士创办的国内人工智能音频领军企业,\
+ 专注于行业智能音频交互技术,拥有全链条核心自主知识产权,汇集世界一流的研发运营团队。\" \
+ }\
+ }";
+
+
+ if (send_websocket_message(tts_client,( uint8_t *)jsonString,strlen(jsonString),WS_TEXT)==0)
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message succ 0\n");
+ else
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message fail 1\n");
+}
+
+
+// send_msg_data_into_Ai_msg_queue((uint8_t *)tts_recv_buf,len,200);
+
+void tts_cache_file(uint8_t *data, uint32_t len)
+{
+ FILE *fp= fopen("/user/tts.bin","ab+");
+ if(fp)
+ {
+ fwrite(data,1,len,fp);
+ fclose(fp);
+ }
+}
+
+
+void tts_paly()
+{
+ char buf[1024]={0};
+
+ FILE *fp=fopen("/user/tts.bin","rb+");
+ int read_size;
+
+ uint32_t pack=1024;
+
+ if(fp==NULL)
+ {
+ return;
+ }
+ do
+ {
+ memset_s(buf,1024,0,1024);
+ read_size=fread(buf,1,1024,fp);
+
+ if(read_size!=0)
+ {
+ AIStreamWrite((uint8_t *)buf,read_size);
+ msleep(10);
+ }
+
+ } while (read_size==1024);
+ fclose(fp);
+
+ fp= fopen("/user/tts.bin","wb+");
+ if(fp)
+ {
+ fclose(fp);
+ }
+}
+
+uint8_t is_bk_websocket_tts=0;
+
+
+
+void bk_websocket_tts(void *data) {
+
+ // while (1)
+ TTS_SATRT :
+ uapi_cat1_keep_wakeup(1);
+
+ WebSocketMessageType type;
+ bool state = true;
+
+ is_bk_websocket_tts=1;
+
+ uint8_t is_raisound_url=0;
+
+ {
+ // ws://amp.raisound.com/asr/ws
+ char url_buf[124]={0};
+ if(tts_ws_url_init(url_buf))
+ {
+ printf("%s\r\n",url_buf);
+ is_raisound_url=1;
+ }
+ else
+ {
+ is_raisound_url=0;
+ }
+
+ uint8_t client_count=3;
+
+
+
+ while (client_count)
+ {
+ if(is_raisound_url==1)
+ {
+ tts_client = init_websocket_client(url_buf,NULL,1);
+ }
+ else
+ {
+ tts_client = init_websocket_client("ws://118.145.158.207:22080/tts/stream?audio_buffer_size=1024",NULL,0);
+ }
+
+
+ if (tts_client== NULL)
+ {
+ printf("init_websocket_client fail %d\r\n",client_count);
+ client_count--;
+ msleep(1000);
+ continue ;
+ }
+ else
+ {
+ printf("tts_client init_websocket_client succ \r\n");
+ break;
+ }
+ }
+ if (tts_client== NULL){
+ is_bk_websocket_tts=0;
+ return;
+ }
+
+ server_state=0x04^server_state;
+ if(server_state==0b00000111)
+ {
+ // uapi_start_asr();
+ // uapi_start_tts_single_txt("2025英超夏季转会窗分阶段开启第一阶段2025年6月1日至2025年6月11日凌晨2:00北京时间第二阶段常规夏窗2025年6月16日至2025年9月2日凌晨2:00北京时间本贴将持续更新2025年夏窗以曼联转会相关为主的新闻和消息。");
+ }
+
+ tts_break=0;
+
+// uapi_start_tts_single();
+
+ char* tts_recv_buf=(char *)malloc(1024*4);
+
+ set_ai_tts_server_init_flag(1);
+
+ while (disconnect_server==0)
+ {
+
+
+ memset_s(tts_recv_buf,1024*4,0,1024*4);
+ int len=receive_websocket_message(tts_client,(unsigned char *)tts_recv_buf,1024*4,&type);
+ // if(type==WS_CONT ||
+ if( type==WS_CLOSE || len==-1)//|| type==WS_CONT )
+ {
+ printf("WS_lwip_close bk_websocket_tts\r\n");
+ break;
+ }
+ // printf("bk_websocket_tts bk_websocket_tts %d\r\n",type);
+ if(type==WS_BINARY)
+ {
+ if(bk_websocket_tts_tick==0)
+ {
+ set_AIStreamend(0);
+ bk_websocket_tts_tick = (uint32_t)osKernelGetTickCount();
+ }
+ // tts_cache_file((uint8_t *)tts_recv_buf,len);——
+ // AIStreamWrite((uint8_t *)tts_recv_buf,len);
+ send_msg_data_into_Ai_msg_queue((uint8_t *)tts_recv_buf,len,200);
+ printf("bk_websocket_demo tts %d\n",len);
+ //
+ msleep(1);
+
+ }
+ else if(type==WS_TEXT)
+ {
+ printf("bk_websocket_demo %s %d %d\n",tts_recv_buf,bk_websocket_tts_tick,(uint32_t)osKernelGetTickCount());
+
+ send_msg_data_into_Ai_msg_queue((uint8_t *)tts_recv_buf,len,201);
+ bk_websocket_tts_tick=0;
+ // tts_paly();
+ }
+ // aer_result_analysis(asr_recv_buf);
+ }
+
+ bk_websocket_tts_tick=0;
+
+ set_ai_tts_server_init_flag(0);
+
+ lwip_close_websocket_client(tts_client);
+ tts_client=NULL;
+
+ if(tts_reconnect)
+ {
+ if(disconnect_server==0)
+ {
+ set_clear_queue_stream(1);
+ goto TTS_SATRT;
+ }
+ tts_reconnect=0;
+ }
+ // return;
+ }
+ is_bk_websocket_tts=0;
+
+}
+
+
+errcode_t tts_server_init(void)
+{
+
+ if(tts_client!=NULL || is_bk_websocket_tts)
+ {
+ return ERRCODE_FAIL;
+ }
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"tts_server_init !\r\n");
+ app_task_definition_t taskcfg={0};
+ taskcfg.create_queue_handle = NULL;
+ taskcfg.attr.name="tts_server_init";
+ taskcfg.attr.priority = TASK_PRIORITY_APP;
+ taskcfg.attr.stack_size = 0x1000;
+ taskcfg.func = bk_websocket_tts;
+ taskcfg.use_mem = USE_EXTEND_MEM;
+
+ errcode_t ret=uapi_create_osThread_custom(&taskcfg);
+
+
+ if(ret != ERRCODE_SUCC)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"create cat1_service_file failed %d!\r\n",ret);
+ return ERRCODE_FAIL;
+ }
+ return ERRCODE_SUCC;
+}
+
+
+static uint8_t is_init_ai=1;
+
+
+int32_t uapi_tts_paly_init(void)
+{
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"uapi_tts_paly_init\n");
+
+ int32_t ret = ERRCODE_FAIL;
+ int32_t argc = 1;
+ uint8_t *argv = (uint8_t *)"StartAIpaly";
+ {
+ ret = VoiceCallVolteSample(argc, (const char **)&argv);
+ }
+
+
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"ret %d ",ret);
+
+ return ret;
+}
+
+
+int32_t uapi_tts_paly_stop(void)
+{
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"uapi_tts_paly_init\n");
+
+ tts_break=1;
+ AIStreamFlush();
+ send_msg_data_into_Ai_msg_queue((uint8_t *)"tts_recv_buf",13,201);
+
+ int32_t ret = ERRCODE_FAIL;
+ int32_t argc = 1;
+ uint8_t *argv = (uint8_t *)"stop";
+ {
+ ret = VoiceCallVolteSample(argc, (const char **)&argv);
+ }
+
+
+
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"ret %d ",ret);
+
+ return ret;
+}
+
+void asr_server_deinit(void)
+{
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"WS_CLOSE");
+ send_websocket_message(asr_client,(uint8_t *)"WS_CLOSE",strlen("WS_CLOSE"),WS_CLOSE);
+}
+
+
+void chat_server_deinit(void)
+{
+ send_websocket_message(chat_client,(uint8_t *)"WS_CLOSE",strlen("WS_CLOSE"),WS_CLOSE);
+}
+
+
+void tts_server_deinit(void)
+{
+ send_websocket_message(tts_client,(uint8_t *)"WS_CLOSE",strlen("WS_CLOSE"),WS_CLOSE);
+
+
+}
+
+
+
+static void time_sync_func(void)
+{
+if(asr_client)
+ {
+ if(asr_client_ping)
+ {
+ // asr_server_deinit();
+ // lwip_close_websocket_client(asr_client);
+ // asr_client=NULL;
+ }
+ else
+ {
+ // if(0==send_websocket_message(asr_client,( const unsigned char *)"ping",strlen("ping"),WS_PING))
+ {
+ asr_client_ping=1;
+ }
+
+ }
+
+ }
+
+}
+
+
+
+
+bool init_ai_task(uint8_t type)
+{
+ if(is_init_ai)
+ {
+ disconnect_server=0;
+
+ g_timer_time_sync = osTimerNew((osTimerFunc_t)time_sync_func, osTimerPeriodic, NULL, NULL);
+ if (g_timer_time_sync == NULL)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"g_timer_time_sync create failed\n");
+ }
+ type_ai=type;
+ uapi_tts_paly_init();
+ tts_server_init();
+ chat_server_init();
+ // is_init_ai=0;
+ }
+
+ return true;
+}
+
+
+
+
+
+bool dinit_ai_task(void)
+{
+ if(is_init_ai)
+ {
+ disconnect_server=1;
+
+ if(g_timer_time_sync)
+ {
+ osTimerDelete(g_timer_time_sync);
+ g_timer_time_sync =NULL;
+ }
+
+ uapi_tts_paly_stop();
+
+ asr_server_deinit();
+
+ chat_server_deinit();
+
+ tts_server_deinit();
+ // is_init_ai=0;
+ }
+
+ return true;
+}
+
+//
+void pre_AI_init(void)
+{
+ if(read_dev_token(NULL)==false)
+ {
+ aut_login();
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
\ No newline at end of file
}
#include "dev_authentication.h"
-// extern void aut_active(void);
+
static uint32_t active(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
{
printf("CAT1TEST ATCMD Convert Command Failed\n");
return ERRCODE_FAIL;
}
- aut_login();
+ pre_AI_init();
return 0;
}
#include <ui_service.h>
#include <bleService.h>
#include "cat1_ws.h"
+#include "dev_authentication.h"
#ifdef __cplusplus
extern osStatus_t osDelay(uint32_t ticks);
#define cat1_msleep(ms) LOS_Msleep(ms) /* osDelay(1) : 1ms */
-static osTimerId_t g_timer_time_sync = NULL;
+
void bk_sleep(uint32_t time)
{
#include <stdlib.h>
#include <string.h>
-extern bool read_dev_token(char *data_token);
void * aic_zalloc(unsigned int len)
return malloc(len);
}
-void uapi_start_tts_single_txt(char *buf);
-
-void uapi_start_tts_single(void);
-
-
-errcode_t asr_server_init(void);
-static uint8_t server_state=0;
-
-static uint8_t disconnect_server=0;
-// free
-
// 定义一个结构体来存储解析后的URL部分
typedef struct {
char *protocol;
}
-char *asr_recv_buf=NULL;//[1024]={0};
-WebSocketClient *asr_client=NULL;
-
-int32_t uapi_tts_paly_init(void);
-
-int32_t uapi_tts_paly_stop(void);
-
-uint32_t bk_websocket_tts_tick=0;
-
-uint8_t tts_reconnect=0;
-
-uint8_t asr_need_stop=0;
-
-
-char recv_buf[1024]={0};
-
-WebSocketClient *chat_client=NULL;
-
-
-WebSocketClient *tts_client=NULL;
-
-
-errcode_t chat_server_init(void);
-
-errcode_t tts_server_init(void);
-
-// void tts_server_deinit(void);
-uint8 tts_break =0;
-
-void uapi_set_tts_break(uint8_t data)
-{
- tts_break=data;
-}
-
-uint8_t uapi_get_tts_break(void)
-{
- return tts_break;
-}
-
-char result_str_asr[256]={0};
-
-
-static uint8_t type_ai=0;
-
-uint8_t chat_reconnect=0;
-
-void uapi_UI_start_asr(uint8_t type)
-{
- memset_s(result_str_asr,256,0,256);
- // uapi_stop_tts();
-
-
- if(type_ai!=type)
- {
- type_ai=type;
- if(chat_client)
- {
- chat_server_deinit();
- chat_reconnect=1;
- }
- }
-
-
- /////////////////////////////////////////////////////
-
- tts_break=1;
- tts_server_deinit();
- tts_reconnect=1;
-
- AIStreamFlush();
- send_msg_data_into_Ai_msg_queue((uint8_t *)"tts_recv_buf",13,201);
-
-
- asr_need_stop=0;
-
- asr_server_init();
-
- if(chat_client==NULL)
- {
- chat_server_init();
- }
- if(tts_client==NULL)
- {
- tts_server_init();
- }
-
-
-}
-
-
-void uapi_UI_stop_start_asr_timeout(void)
-{
- asr_need_stop=1;
-}
-
-void uapi_UI_stop_asr(void)
-{
- if(stop_AudioCaptureProcess_AI())
- {
- // if(strlen(result_str_asr))
- // {
- // send_ai_txt(0,result_str_asr);
- // memset_s(result_str_asr,256,0,256);
- // }
-
- }
-}
-
-
-
-
-bool send_ai_txt(uint8_t type,char *msg)
-{
- cJSON* dataJSON = cJSON_CreateObject();
-
- if (dataJSON == NULL) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"Error creating JSON object\n");
- return false;
- }
-
-
- cJSON_AddStringToObject(dataJSON,"type","jiutian-lan");
-
- cJSON_AddStringToObject(dataJSON,"content",msg);
-
- char *jsonString = cJSON_PrintUnformatted(dataJSON);
-
- if (jsonString == NULL) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"Error printing JSON to string\n");
- cJSON_Delete(dataJSON);
- return false;
- }
-
- uint32_t data_len = strlen(jsonString);
- cJSON_Delete(dataJSON);
-
- if (data_len == 0) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"Error: JSON string length is 0\n");
- cJSON_free(jsonString);
- return false;
- }
-
- if (send_websocket_message(chat_client,( uint8_t *)jsonString,strlen(jsonString),WS_TEXT)==0)
-{
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message succ 0\n");
- cJSON_free(jsonString);
- return true;
- }
-
- else
- {
- if(chat_client==NULL)
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"chat_client is NULL\n");
- }
- cJSON_free(jsonString);
- return false;
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message fail\n");
- }
-
-
-}
-
-
-
-// {"type":"middle","content":"我是","task_id":"","reasoning_content":""}
-// char content_str_chat[64]={0};
-
-bool chat_result_analysis(char *buf)
-{
- cJSON* root = cJSON_Parse((const char *)buf);
- if (root == NULL) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"解析失败\n");
- return false;
- }
- char *type_str=NULL;
- char *content_str=NULL;
-
- cJSON* type = cJSON_GetObjectItem(root, "type");
- if (type && cJSON_IsString(type)) {
-
- type_str= type->valuestring;
- }
- cJSON* content = cJSON_GetObjectItem(root, "content");
- if (content && cJSON_IsString(content)) {
- content_str = content->valuestring;
- }
- if(strcmp("middle",type_str)==0)
- {
- if(strlen(content_str)>0)
- {
- // memset_s(content_str_chat,64,0,64);
- // memcpy_s(content_str_chat,64,content_str,strlen(content_str));
- char *content_str_chat = (char *)malloc(strlen(content_str)+1);
- strcpy(content_str_chat,content_str);
- ble_set_ai_Answer_str(content_str_chat,2);
- // uapi_start_tts_single_txt(content_str_chat);
- // static uint8_t test=1;
- // if(test)
- // {
- // uapi_start_tts_single();
- // test=0;
-
- // }
- free(content_str_chat);
- }
- }
- if(strcmp("end",type_str)==0)
- {
- char end_str_chat[128]={0};
-
- if(strlen(content_str)>0)
- {
- memset_s(end_str_chat,128,0,128);
- memcpy_s(end_str_chat,128,end_str_chat,strlen(end_str_chat));
- ble_set_ai_Answer_str(end_str_chat,2);
- }
-
- }
-
-
- cJSON_Delete(root);
- return true;
-}
-
-bool chat_ws_url_init(char * put_buf)
-{
- char token[64]={0};
- if(read_dev_token(token))
- {
- sprintf(put_buf,"ws://amp.raisound.com/chat/ws?dt=%s&platform=chinamobiledevice&bot_type=jiutian-lan",token);
- return true;
- }
- else
- {
- return false;
- }
-
-}
-
-uint8_t is_bk_websocket_chat=0;
-static uint8_t ai_asr_service_init_flag = 0; //asr初始化标志
-static uint8_t ai_chat_service_init_flag = 0; //chat初始化标志
-static uint8_t ai_tts_server_init_flag = 0; //tts初始化标志
-// 获取ASR服务初始化标志
-uint8_t get_ai_asr_service_init_flag(void)
-{
- return true;
-}
-
-// 设置ASR服务初始化标志
-void set_ai_asr_service_init_flag(uint8_t flag)
-{
- ai_asr_service_init_flag = flag;
-}
-
-// 获取Chat服务初始化标志
-uint8_t get_ai_chat_service_init_flag(void)
-{
- return ai_chat_service_init_flag;
-}
-
-// 设置Chat服务初始化标志
-void set_ai_chat_service_init_flag(uint8_t flag)
-{
- ai_chat_service_init_flag = flag;
-}
-
-// 获取tts服务初始化标志
-uint8_t get_ai_tts_server_init_flag(void)
-{
- return ai_tts_server_init_flag;
-}
-// 设置tts服务初始化标志
-void set_ai_tts_server_init_flag(uint8_t flag)
-{
- ai_tts_server_init_flag = flag;
-}
-
-uint8_t get_bk_websocket_tts_tick(void)
-{
- return bk_websocket_tts_tick;
-}
-
-void bk_websocket_demo(void *data) {
-
- // while (1)
- {
- /* code */
- char_reconnet:
- is_bk_websocket_chat=1;
-
- // char url_buf[124]={0};
- // if(chat_ws_url_init(url_buf))
- // {
- // printf("%s\r\n",url_buf);
- // }
- // else
- // {
- // is_bk_websocket_chat=0;
- // return;
- // }
- uint8_t client_count=3;
-
- while (client_count)
- {
- // http://118.145.158.207:22080ws://118.145.158.207:22080/chat/ws
- // ws://amp.raisound.com/chat/ws?dt=%s&platform=chinamobiledevice&bot_type=jiutian-lan
- // type_ai=AI_TYPE_DE;
- if(type_ai==AI_TYPE_JIU)
- {
- chat_client = init_websocket_client("ws://118.145.158.207:22080/chat/ws?&platform=chinamobiledevice&bot_type=jiutian-lan",NULL,0);
- }
- else if(type_ai==AI_TYPE_DOU)
- {
- chat_client = init_websocket_client("ws://118.145.158.207:22080/chat/ws?&platform=huoshan",NULL,0);
- }
- else if(type_ai==AI_TYPE_WEN)
- {
- chat_client = init_websocket_client("ws://118.145.158.207:22080/chat/ws?&platform=baidu",NULL,0);
- }
- else if(type_ai==AI_TYPE_KIMI)
- {
- chat_client = init_websocket_client("ws://118.145.158.207:22080/chat/ws?&platform=moonshot",NULL,0);
- }
- else if(type_ai==AI_TYPE_DE)
- {
- chat_client = init_websocket_client("ws://118.145.158.207:22080/chat/ws?platform=huoshan&model=ep-20250206162546-g74w6",NULL,0);
- }
- else
- {
- chat_client = init_websocket_client("ws://118.145.158.207:22080/chat/ws?&platform=aliyun",NULL,0);
- }
-
-
-
- if (chat_client== NULL) {
- client_count--;
- bk_sleep(1000);
- continue ;
- }
- else
- {
- break;
- }
- }
- if (chat_client== NULL){
- is_bk_websocket_chat=0;
- return;
- }
-
- server_state=0x02^server_state;
- if(server_state==0b00000111)
- {
- // uapi_start_asr();
- // uapi_start_tts_single_txt("2025英超夏季转会窗分阶段开启第一阶段2025年6月1日至2025年6月11日凌晨2:00北京时间第二阶段常规夏窗2025年6月16日至2025年9月2日凌晨2:00北京时间本贴将持续更新2025年夏窗以曼联转会相关为主的新闻和消息。");
- }
-
-
- // send_ai_txt(1,"你是谁");
-
- set_ai_chat_service_init_flag(1);
- WebSocketMessageType type;
- while (disconnect_server==0)
- {
- memset_s(recv_buf,1024,0,1024);
- int len= receive_websocket_message(chat_client,(unsigned char *)recv_buf,1024,&type);
- if(len==-1 || type == WS_CLOSE)
- {
- break;
- }
- chat_result_analysis(recv_buf);
- printf("bk_websocket_demo %s",recv_buf);
- }
-
- set_ai_chat_service_init_flag(0);
- lwip_close_websocket_client(chat_client);
- chat_client=NULL;
-
- if(chat_reconnect==1)
- {
- chat_reconnect=0;
- goto char_reconnet;
- }
- is_bk_websocket_chat=0;
- return ;
- }
-}
-
-
-#include "osal_msgqueue.h"
-#include "thread_init.h"
-#include "soc_osal.h"
-#include "common_def.h"
-#include "los_printf.h"
-#include <aivoice/include/AiVoiceModelC.h>
-
-#define CAT1_SERVICE_TASK_SIZE (2048)
-#define CAT1_SERVICE_TASK_PRIO 5
-
-
-
-
-
-
-errcode_t chat_server_init(void)
-{
- if(chat_client || is_bk_websocket_chat)
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"cat1_tcp_server_init is connet!\r\n");
- return ERRCODE_FAIL;
- }
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"cat1_tcp_server_init !\r\n");
- app_task_definition_t taskcfg={0};
- taskcfg.create_queue_handle = NULL;
- taskcfg.attr.name="chat_server_init";
- taskcfg.attr.priority = TASK_PRIORITY_APP;
- taskcfg.attr.stack_size = 0x1000;
- taskcfg.func = bk_websocket_demo;
- taskcfg.use_mem = USE_EXTEND_MEM;
-
- errcode_t ret=uapi_create_osThread_custom(&taskcfg);
-
-
- if(ret != ERRCODE_SUCC)
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"create cat1_service_file failed %d!\r\n",ret);
- return ERRCODE_FAIL;
- }
- return ERRCODE_SUCC;
-}
-
-
-/////////////////////////////////////////////asr///////////////
-
-// http://118.145.158.207:22080ws://amp.raisound.com/asr/ws
-
-
-
-
-//查询是否可以对话
-void uapi_start_asr(void)
-{
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"查询uapi_start_asr是否可用\n");
-
- char *jsonString = "{\"header\":{\"event\":\"StartTranscription\",\"trace_id\": \
- \"3fa6b9e6a30b407ea38ad7ae69e6c291\"},\"payload\":{\"format\":\"MP3\",\"sample_rate\":16000}}";
-
- if (send_websocket_message(asr_client,( uint8_t *)jsonString,strlen(jsonString),WS_TEXT)==0)
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message succ 0\n");
- else
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message erro\n");
- }
-
-}
-
-void uapi_start_asr_task(void)
-{
-
- do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AI_SEND_TEST, nullptr, 0);
-
-}
-
-
-
-//停止对话
-void uapi_stop_asr(void)
-{
- char *jsonString ="{\"header\":{\"event\":\"StopTranscription\",\"trace_id\":\"3fa6b9e6a30b407ea38ad7ae69e6c291\"}}";
-
- if (send_websocket_message(asr_client,( uint8_t *)jsonString,strlen(jsonString),WS_TEXT)==0)
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message succ 0\n");
- else
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message erro\n");
- }
-}
-
-
-
-void send_ai_bin(uint8_t *buf,uint32_t len)
-{
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_ai_bin %d\n",len);
-
- if (send_websocket_message(asr_client,( uint8_t *)buf,len,WS_BINARY)==0)
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message succ 0\n");
- bk_sleep(100);
- }
- else
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message fail 0\n");
- }
-
-}
-
-void record_test(void)
-{
- char buf[1024]={0};
- bk_sleep(1000);
-
- FILE *fp=fopen("/user/aiRecord.bin","rb+");
- int read_size;
- int read_size_num=0;
- uint32_t pack=1024;
-
- if(fp==NULL)
- {
- return;
- }
- do
- {
- memset_s(buf,1024,0,1024);
- read_size=fread(buf,1,pack,fp);
-
- if(read_size!=0)
- {
- send_msg_data_into_Ai_msg_queue((void *)buf,(uint16_t)read_size,0);
- read_size_num+=read_size;
-
- }
-
- } while (read_size==pack);
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"record_test %d\n",read_size_num);
- fclose(fp);
-}
-
-// {"status":20000000,"msg":"success","task_id":"80228c9f62821ffe3f867e1a5042d887","event":"TranscriptionStarted","result":null}
-// {"status":20000000,
-// "msg":"success","task_id":"e8274ed1efb60d8146c076a847d7b71a",
-// "event":"SentenceEnd","result":{"result":"你好你好你好你好。",
-// "is_end":true,"sentence_id":"fcb889fe74a0920efe14939de2fd2b1b",
-// "start_time":760,"end_time":2280}}
-void asr_record_test(void)
-{
- // uapi_start_asr();
- bk_sleep(500);
- record_test();
- bk_sleep(500);
- uapi_stop_asr();
-}
-
-
-
-uint8_t asr_is_start=0;
-
-bool aer_result_analysis(char *buf)
-{
- cJSON* root = cJSON_Parse((const char *)buf);
- if (root == NULL) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"解析失败\n");
- return false;
- }
- char *result_str=NULL;
- int start_time_int=0;
- int end_time_int=0;
- bool is_end_bool=false;
- char *event_str=NULL;
-
- cJSON* event = cJSON_GetObjectItem(root, "event");
- if (event && cJSON_IsString(event)) {
- event_str= event->valuestring;
-
- }
-
- cJSON* result = cJSON_GetObjectItem(root, "result");
- if (result)
- {
- cJSON* result_ = cJSON_GetObjectItem(result, "result");
-
- if (result_ && cJSON_IsString(result_)) {
- result_str= result_->valuestring;
- }
- cJSON* start_time = cJSON_GetObjectItem(result, "start_time");
- if (start_time && cJSON_IsNumber(start_time)) {
-
- start_time_int = root->valueint;
- }
- cJSON* end_time = cJSON_GetObjectItem(result, "end_time");
- if (end_time && cJSON_IsNumber(end_time)) {
- end_time_int = end_time->valueint;
- }
-
- cJSON* is_end = cJSON_GetObjectItem(result, "is_end");
- if (is_end && cJSON_IsBool(is_end)) {
- is_end_bool = is_end->valueint;
- }
- }
-
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"str %s start %d end %d is end %d\n",result_str,start_time_int,end_time_int,is_end_bool);
-
- if(is_end_bool==true)
- {
- memset_s(result_str_asr,256,0,256);
- memcpy_s(result_str_asr,256,result_str,strlen(result_str));
- SendMsgToUIService(UI_AI_JUMP_TO_RESULT_VIEW, 0, nullptr, 0);//先跳转到结果界面
-
- ble_set_ai_Question_str(result_str_asr);
- // stop_AudioCaptureProcess_AI();
- send_ai_txt(0,result_str_asr);
-
- }
- if(strcmp(event_str,"TranscriptionStarted")==0) //可以对话了,切换到聆听界面
- {
- //查询结果
- startAudioCaptureTask();
- // {
- // //上传文件
- // }
-
- bool state = true;
- SendMsgToUIService(UI_AI_JUMP_TO_LISTENING_VIEW, 0, &state, sizeof(bool));
-
- }
- if(strcmp(event_str,"TranscriptionCompleted")==0) //asr 结束
- {
- return false;
- }
- if(strcmp(event_str,"Failed")==0)
- {
- stop_AudioCaptureProcess_AI();
- return false;
- }
-
- cJSON_Delete(root);
- return true;
-
-
-}
-
-uint8_t is_bk_websocket_asr=0;
-
-// ws://amp.raisound.com/asr/ws?dt=95fc6dcdf5a3e9a48df535453efd097c19&platform=aliyun
-
-
-bool asr_ws_url_init(char * put_buf)
-{
- char token[64]={0};
- if(read_dev_token(token))
- {
- sprintf(put_buf,"ws://amp.raisound.com/asr/ws?dt=%s&platform=aliyun",token);
- return true;
- }
- else
- {
- return false;
- }
-}
-
-const char* ws_test_server_url="ws://118.145.158.207:22080/asr/ws";
-const char* ws_snicker_test_server_url="ws://110.42.224.129:8910/asr/ws";
-
-int g_test_server_index = 1; //0 正式版本, 1 测试版本, 2 Snicker 服务器测试版本
-
-static int asr_client_ping=0;
-
-int asr_client_sockfd_last_id=-1;
-
-void asr_server_deinit(void);
-
-
-void bk_websocket_asr(void *data) {
-
- // while (1)
-
- WebSocketMessageType type;
- bool state = true;
-
- is_bk_websocket_asr=1;
- // while (1)
- {
- char url_buf[124]={0};
- if (g_test_server_index==0)
- {
- //ws://amp.raisound.com/asr/ws
- if(asr_ws_url_init(url_buf))
- {
- printf("%s\r\n",url_buf);
- }
- else
- {
- return;
- }
- }
-
-
- uint8_t client_count=3;
-
- while (client_count && asr_need_stop==0)
- {
- if (g_test_server_index == 1)
- {
- asr_client = init_websocket_client("ws://118.145.158.207:22080/asr/ws",NULL,0);
-
- }else if (g_test_server_index == 2)
- {
- asr_client = init_websocket_client("ws://110.42.224.129:8910/asr/ws",NULL,0);
-
- }else{
- asr_client = init_websocket_client(url_buf,NULL,1);
-
- }
- if (asr_client== NULL) {
- printf("init_websocket_client fail %d\r\n",client_count);
- client_count--;
- bk_sleep(1000);
- continue ;
- }
- else
- {
- break;
- }
- }
-
- asr_need_stop=0;
-
- if (asr_client== NULL){
-
- bool state = false;
- SendMsgToUIService(UI_AI_JUMP_TO_LISTENING_VIEW, 0, &state, sizeof(bool));
- is_bk_websocket_asr=0;
- return;
- }
-
- uapi_cat1_keep_wakeup(1);
-
- server_state=0x01^server_state;
- if(server_state==0b00000111)
- {
- // uapi_start_asr();
- // uapi_start_tts_single_txt("2025英超夏季转会窗分阶段开启第一阶段2025年6月1日至2025年6月11日凌晨2:00北京时间第二阶段常规夏窗2025年6月16日至2025年9月2日凌晨2:00北京时间本贴将持续更新2025年夏窗以曼联转会相关为主的新闻和消息。");
- }
-
- asr_recv_buf=(char *)malloc(0x400);
- set_ai_asr_service_init_flag(1);
-
- if(osTimerIsRunning(g_timer_time_sync)==0 )
- {
- osStatus_t ret = osTimerStart(g_timer_time_sync,5000*3);
- WEARABLE_LOGI(WEARABLE_LOG_MODULE_MAIN_SERVICE,"cat1 restart_time_sync timer ret %d\n",ret);
- }
-
- // uapi_start_asr();
- // SendMsgToUIService(UI_4G_AI_INIT_STAUS, 0,&state, sizeof(bool));
-
- int sndbuf_len = 1024*5;
- lwip_setsockopt(asr_client->sockfd, SOL_SOCKET, SO_SNDBUF, &sndbuf_len, sizeof(sndbuf_len));
-
- uapi_start_asr();
-
- // asr_server_deinit();
-
- while (disconnect_server==0)
- {
- memset_s(asr_recv_buf,1024,0,1024);
- int len= receive_websocket_message(asr_client,(unsigned char *)asr_recv_buf,1024,&type);
- // if(type==WS_CONT ||
- printf(" bk_websocket_asr type %d len %d\r\n",type,len);
- printf("bk_websocket_demo %s %d\n",asr_recv_buf,type);
-
- if( type==WS_CLOSE || len==-1)
- {
- printf("WS_lwip_close bk_websocket_asr\r\n");
-
- if (len>2&& type==WS_CLOSE)
- {
- printf("WS_CLOSE reason %s\n",asr_recv_buf+2);
- }
- break;
- }
- if(type==WS_TEXT)
- {
- if(false== aer_result_analysis(asr_recv_buf))
- {
- printf("WS_lwip_close false== aer_result_analysis(asr_recv_buf)\r\n");
- break;
- }
- }
- if(type==WS_PONG)
- {
- asr_client_ping=0;
- }
- }
-
- set_ai_asr_service_init_flag(0);
- free(asr_recv_buf);
-
- lwip_close_websocket_client(asr_client);
- asr_client=NULL;
-
- asr_client_ping=0;
- bk_sleep(1000);
- // return;
- }
- is_bk_websocket_asr=0;
-
-
-}
-
-
-
-errcode_t asr_server_init(void)
-{
- if(is_bk_websocket_asr || asr_client!=NULL)
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"cat1_tcp_server_init is connet!\r\n");
- return ERRCODE_FAIL;
- }
-
-
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"asr_server_init !\r\n");
- app_task_definition_t taskcfg={0};
- taskcfg.create_queue_handle = NULL;
- taskcfg.attr.name="asr_server_init";
- taskcfg.attr.priority = TASK_PRIORITY_APP;
- taskcfg.attr.stack_size = 0x1000;
- taskcfg.func = bk_websocket_asr;
- taskcfg.use_mem = USE_EXTEND_MEM;
-
- errcode_t ret=uapi_create_osThread_custom(&taskcfg);
-
-
- if(ret != ERRCODE_SUCC)
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"create cat1_service_file failed %d!\r\n",ret);
- return ERRCODE_FAIL;
- }
- return ERRCODE_SUCC;
-}
-/////////////////////////////////////////////tts接口////////////////////////////////////////////
-
-bool tts_ws_url_init(char * put_buf)
-{
- char token[64]={0};
- if(read_dev_token(token))
- {
- sprintf(put_buf,"ws://amp.raisound.com/tts/stream?dt=%s&platform=huoshan&noCache=1",token);
- return true;
- }
- else
- {
- return false;
- }
-
-}
-
-
-
-
-void uapi_start_tts(void)
-{
- char *jsonString =
- "{\"header\": \
- { \"event\": \"StartSynthesis\",\
- \"trace_id\": \"3fa6b9e6a30b407ea38ad7ae69e6c291\"},\
- \"payload\": \
- {\"voice\":\"xiaoyun\",\
- \"format\":\"mp3\",\
- \"sample_rate\":16000,\
- \"volume\":80,\
- \"speech_rate\":0}\
- }";
-
- printf("uapi_start_tts : %s\r\n",jsonString);
-
- if (send_websocket_message(tts_client,( uint8_t *)jsonString,strlen(jsonString),WS_TEXT)==0)
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message succ 0\n");
-}
-
-
-void uapi_stop_tts(void)
-{
- char *jsonString =
- " { \
- \"header \": { \
- \"event\": \"StopSynthesis\", \
- \"trace_id\": \" 3fa6b9e6a30b407ea38ad7ae69e6c291 \" \
- } \
- } ";
-
- printf("uapi_start_tts : %s\r\n",jsonString);
-
- if (send_websocket_message(tts_client,( uint8_t *)jsonString,strlen(jsonString),WS_TEXT)==0)
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message succ 0\n");
-}
-
-
-
-void uapi_start_tts_single(void)
-{
- char *jsonString =
- " { \"header\": { \
- \"event\": \"LongTextStream\",\
- \"trace_id\": \"3fa6b9e6a30b407ea38ad7ae69e6c291\" \
- }, \
- \"payload\": { \
- \"voice\":\"xiaoyun\", \
- \"format\":\"pcm\", \
- \"sample_rate\":16000, \
- \"volume\":50, \
- \"speech_rate\":0, \
- \"text\":\"深圳市北科瑞声科技股份有限公司,是由国家重大人才计划特聘专家刘轶博士创办的国内人 \
- 工智能音频领军企业,专注于行业智能音频交互技术,拥有全链条核心自主知识产权,汇集世界一流的研发运营团队。\" \
- } } ";
-
- printf("uapi_start_tts : %s\r\n",jsonString);
-
- if (send_websocket_message(tts_client,(uint8_t *)jsonString,strlen(jsonString),WS_TEXT)==0)
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message succ 0\n");
-}
-
-
- void uapi_start_tts_single_txt(char *buf)
-{
-
-
- char *jsonString = (char *)malloc(strlen(buf)+300);// [512] ={0};
-
- sprintf(jsonString,
-
- // " {\" header\" : { \
- // \"event\": \" RunSynthesis\", \
- // \"trace_id \": \" 3fa6b9e6a30b407ea38ad7ae69e6c291 \" \
- // }, \
- // \"payload \": { \
- // \"text \":\" %s \" \
- // }}"
-
- " { \"header\": { \
- \"event\": \"LongTextStream\", \
- \"trace_id\": \"3fa6b9e6a30b407ea38ad7ae69e6c291\"\
- },\
- \"payload\": {\
- \"voice\":\"xiaoyun\",\
- \"format\":\"mp3\",\
- \"sample_rate\":16000,\
- \"volume\":80,\
- \"speech_rate\":0,\
- \"text\":\"%s\"\
- } } "
-
- ,buf);
-
- printf("uapi_start_tts : %s\r\n",jsonString);
-
- if (send_websocket_message(tts_client,( uint8_t *)jsonString,strlen(jsonString),WS_TEXT)==0)
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message succ 0\n");
-
- free(jsonString);
- }
-
-// char *tts_txt_str=
-
-
-void send_tts_txt(char *msg)
-{
- char *jsonString =
- "{ \
- \"header\": { \
- \"event\": \"RunSynthesis\", \
- \"trace_id\": \"3fa6b9e6a30b407ea38ad7ae69e6c291\"\
- }, \
- \"payload\": { \
- \"text\":\"深圳市北科瑞声科技股份有限公司,是由国家重大人才计划特聘专家刘轶博士创办的国内人工智能音频领军企业,\
- 专注于行业智能音频交互技术,拥有全链条核心自主知识产权,汇集世界一流的研发运营团队。\" \
- }\
- }";
-
-
- if (send_websocket_message(tts_client,( uint8_t *)jsonString,strlen(jsonString),WS_TEXT)==0)
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message succ 0\n");
- else
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message fail 1\n");
-}
-
-
-// send_msg_data_into_Ai_msg_queue((uint8_t *)tts_recv_buf,len,200);
-
-void tts_cache_file(uint8_t *data, uint32_t len)
-{
- FILE *fp= fopen("/user/tts.bin","ab+");
- if(fp)
- {
- fwrite(data,1,len,fp);
- fclose(fp);
- }
-}
-
-
-void tts_paly()
-{
- char buf[1024]={0};
-
- FILE *fp=fopen("/user/tts.bin","rb+");
- int read_size;
-
- uint32_t pack=1024;
-
- if(fp==NULL)
- {
- return;
- }
- do
- {
- memset_s(buf,1024,0,1024);
- read_size=fread(buf,1,1024,fp);
-
- if(read_size!=0)
- {
- AIStreamWrite((uint8_t *)buf,read_size);
- bk_sleep(10);
- }
-
- } while (read_size==1024);
- fclose(fp);
-
- fp= fopen("/user/tts.bin","wb+");
- if(fp)
- {
- fclose(fp);
- }
-}
-
-uint8_t is_bk_websocket_tts=0;
-
-
-
-void bk_websocket_tts(void *data) {
-
- // while (1)
- TTS_SATRT :
- uapi_cat1_keep_wakeup(1);
-
- WebSocketMessageType type;
- bool state = true;
-
- is_bk_websocket_tts=1;
-
- {
- //ws://amp.raisound.com/asr/ws
- // char url_buf[124]={0};
- // if(tts_ws_url_init(url_buf))
- // {
- // printf("%s\r\n",url_buf);
- // }
- // else
- // {
- // is_bk_websocket_tts=0;
- // return;
- // }
-
- uint8_t client_count=3;
-
-
-
- while (client_count)
- {
- tts_client = init_websocket_client("ws://118.145.158.207:22080/tts/stream?audio_buffer_size=1024",NULL,0);
-
- if (tts_client== NULL)
- {
- printf("init_websocket_client fail %d\r\n",client_count);
- client_count--;
- bk_sleep(1000);
- continue ;
- }
- else
- {
- printf("tts_client init_websocket_client succ \r\n");
- break;
- }
- }
- if (tts_client== NULL){
- is_bk_websocket_tts=0;
- return;
- }
-
- server_state=0x04^server_state;
- if(server_state==0b00000111)
- {
- // uapi_start_asr();
- // uapi_start_tts_single_txt("2025英超夏季转会窗分阶段开启第一阶段2025年6月1日至2025年6月11日凌晨2:00北京时间第二阶段常规夏窗2025年6月16日至2025年9月2日凌晨2:00北京时间本贴将持续更新2025年夏窗以曼联转会相关为主的新闻和消息。");
- }
-
- tts_break=0;
-
-// uapi_start_tts_single();
-
- char* tts_recv_buf=(char *)malloc(1024*4);
-
- set_ai_tts_server_init_flag(1);
-
- while (disconnect_server==0)
- {
-
-
- memset_s(tts_recv_buf,1024*4,0,1024*4);
- int len=receive_websocket_message(tts_client,(unsigned char *)tts_recv_buf,1024*4,&type);
- // if(type==WS_CONT ||
- if( type==WS_CLOSE || len==-1)//|| type==WS_CONT )
- {
- printf("WS_lwip_close bk_websocket_tts\r\n");
- break;
- }
- // printf("bk_websocket_tts bk_websocket_tts %d\r\n",type);
- if(type==WS_BINARY)
- {
- if(bk_websocket_tts_tick==0)
- {
- set_AIStreamend(0);
- bk_websocket_tts_tick = (uint32_t)osKernelGetTickCount();
- }
- // tts_cache_file((uint8_t *)tts_recv_buf,len);——
- // AIStreamWrite((uint8_t *)tts_recv_buf,len);
- send_msg_data_into_Ai_msg_queue((uint8_t *)tts_recv_buf,len,200);
- printf("bk_websocket_demo tts %d\n",len);
- //
- bk_sleep(1);
-
- }
- else if(type==WS_TEXT)
- {
- printf("bk_websocket_demo %s %d %d\n",tts_recv_buf,bk_websocket_tts_tick,(uint32_t)osKernelGetTickCount());
-
- send_msg_data_into_Ai_msg_queue((uint8_t *)tts_recv_buf,len,201);
- bk_websocket_tts_tick=0;
- // tts_paly();
- }
- // aer_result_analysis(asr_recv_buf);
- }
-
- bk_websocket_tts_tick=0;
-
- set_ai_tts_server_init_flag(0);
-
- lwip_close_websocket_client(tts_client);
- tts_client=NULL;
-
- if(tts_reconnect)
- {
- if(disconnect_server==0)
- {
- set_clear_queue_stream(1);
- goto TTS_SATRT;
- }
- tts_reconnect=0;
- }
- // return;
- }
- is_bk_websocket_tts=0;
-
-}
-
-
-errcode_t tts_server_init(void)
-{
-
- if(tts_client!=NULL || is_bk_websocket_tts)
- {
- return ERRCODE_FAIL;
- }
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"tts_server_init !\r\n");
- app_task_definition_t taskcfg={0};
- taskcfg.create_queue_handle = NULL;
- taskcfg.attr.name="tts_server_init";
- taskcfg.attr.priority = TASK_PRIORITY_APP;
- taskcfg.attr.stack_size = 0x1000;
- taskcfg.func = bk_websocket_tts;
- taskcfg.use_mem = USE_EXTEND_MEM;
-
- errcode_t ret=uapi_create_osThread_custom(&taskcfg);
-
-
- if(ret != ERRCODE_SUCC)
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"create cat1_service_file failed %d!\r\n",ret);
- return ERRCODE_FAIL;
- }
- return ERRCODE_SUCC;
-}
-
-
-static uint8_t is_init_ai=1;
-
-
-int32_t uapi_tts_paly_init(void)
-{
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"uapi_tts_paly_init\n");
-
- int32_t ret = ERRCODE_FAIL;
- int32_t argc = 1;
- uint8_t *argv = (uint8_t *)"StartAIpaly";
- {
- ret = VoiceCallVolteSample(argc, (const char **)&argv);
- }
-
-
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"ret %d ",ret);
-
- return ret;
-}
-
-
-int32_t uapi_tts_paly_stop(void)
-{
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"uapi_tts_paly_init\n");
-
- tts_break=1;
- AIStreamFlush();
- send_msg_data_into_Ai_msg_queue((uint8_t *)"tts_recv_buf",13,201);
-
- int32_t ret = ERRCODE_FAIL;
- int32_t argc = 1;
- uint8_t *argv = (uint8_t *)"stop";
- {
- ret = VoiceCallVolteSample(argc, (const char **)&argv);
- }
-
-
-
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"ret %d ",ret);
-
- return ret;
-}
-
-void asr_server_deinit(void)
-{
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"WS_CLOSE");
- send_websocket_message(asr_client,(uint8_t *)"WS_CLOSE",strlen("WS_CLOSE"),WS_CLOSE);
-}
-
-
-void chat_server_deinit(void)
-{
- send_websocket_message(chat_client,(uint8_t *)"WS_CLOSE",strlen("WS_CLOSE"),WS_CLOSE);
-}
-
-
-void tts_server_deinit(void)
-{
- send_websocket_message(tts_client,(uint8_t *)"WS_CLOSE",strlen("WS_CLOSE"),WS_CLOSE);
-
-
-}
-
-
-
-static void time_sync_func(void)
-{
-if(asr_client)
- {
- if(asr_client_ping)
- {
- // asr_server_deinit();
- // lwip_close_websocket_client(asr_client);
- // asr_client=NULL;
- }
- else
- {
- // if(0==send_websocket_message(asr_client,( const unsigned char *)"ping",strlen("ping"),WS_PING))
- {
- asr_client_ping=1;
- }
-
- }
-
- }
-
-}
-
-
-
-
-bool init_ai_task(uint8_t type)
-{
- if(is_init_ai)
- {
- disconnect_server=0;
-
- g_timer_time_sync = osTimerNew((osTimerFunc_t)time_sync_func, osTimerPeriodic, NULL, NULL);
- if (g_timer_time_sync == NULL)
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"g_timer_time_sync create failed\n");
- }
- type_ai=type;
- uapi_tts_paly_init();
- tts_server_init();
- chat_server_init();
- // is_init_ai=0;
- }
-
- return true;
-}
-
-
-
-
-
-bool dinit_ai_task(void)
-{
- if(is_init_ai)
- {
- disconnect_server=1;
-
- if(g_timer_time_sync)
- {
- osTimerDelete(g_timer_time_sync);
- g_timer_time_sync =NULL;
- }
-
- uapi_tts_paly_stop();
-
- asr_server_deinit();
-
- chat_server_deinit();
-
- tts_server_deinit();
- // is_init_ai=0;
- }
-
- return true;
-}
-
-
-
#ifdef __cplusplus
}
AI_TYPE_KIMI
}G_AI_TYPE;
+void pre_AI_init(void);
+
////////////////////////////////////////////////////////////////////////
#include "dev_authentication.h"\r
#include "bts_br_gap.h"\r
#include "custom_utils.h"\r
+#include "wearable_log.h"\r
\r
#ifdef __cplusplus\r
extern "C" {\r
//每小时更新登录一次的更新定时器\r
// static aos_timer_ptr LOGIN_1H_timer = NULL;\r
\r
-void aut_active(void)//设备激活\r
+bool aut_active(void)//设备激活\r
{\r
int ret;\r
printf("aut_active");\r
root = cJSON_CreateObject();\r
if (root == NULL) {\r
printf( "Failed to create JSON object\n");\r
- return;\r
+ return false ;\r
}\r
\r
// 添加字段\r
if (json_string == NULL) {\r
printf("Failed to print JSON\n");\r
cJSON_Delete(root);\r
- return;\r
+ return false;\r
}\r
\r
// 输出JSON\r
printf("JSON output: %s\n", json_string);\r
extern uint32_t put_data_by_get_file(char *data,uint16_t data_len);\r
-\r
- put_data_by_get_file(json_string,strlen(json_string));\r
-\r
cJSON_free(json_string);\r
+ if(200==put_data_by_get_file(json_string,strlen(json_string)))\r
+ {\r
+ return true; \r
+ }\r
+ else\r
+ {\r
+ return false;\r
+ }\r
+\r
+ \r
\r
+ \r
\r
}\r
\r
extern bool read_dev_pass(char *data_pass);\r
extern uint32_t post_data_by_get_file(char *data,uint16_t data_len);\r
\r
+uint32_t aut_login_time=0;\r
\r
-void aut_login(void)//登录\r
+bool aut_login(void)//登录\r
{\r
- printf("dev_sign_in 1");\r
+ time_t timestamp;\r
+ timestamp = time(NULL);\r
+\r
+ if(timestamp - aut_login_time < 60 * 60 )\r
+ {\r
+ return true;\r
+ }\r
+\r
char dev_pass[64]={0}; \r
if(read_dev_pass(dev_pass)==false)\r
- return ;\r
+ {\r
+ // return ;\r
+ if(aut_active())\r
+ {\r
+ printf( "aut_active fail\n");\r
+ return false;\r
+ }\r
+ }\r
+ \r
\r
\r
printf("dev_sign_in 2");\r
\r
sprintf(deviceId_temp,"%02X%02x%02X%02x%02X%02x",deviceId[5],deviceId[4],deviceId[3],deviceId[2],deviceId[1],deviceId[0]);\r
\r
- time_t timestamp;\r
- timestamp = time(NULL);\r
+ \r
printf("2时间戳: %ld\n", (long)timestamp);\r
long long timestamp_ms = (long long)timestamp * 1000;\r
char timestamp_str[20] ={0};\r
cJSON *root = cJSON_CreateObject();\r
if (root == NULL) \r
{\r
- return;\r
+ return false;\r
}\r
// 添加字段\r
cJSON_AddStringToObject(root, "deviceId", deviceId_temp);\r
{\r
printf( "Failed to print JSON\n");\r
cJSON_Delete(root);\r
- return;\r
+ return false;\r
}\r
printf("json_string:%s",json_string);\r
\r
- post_data_by_get_file(json_string,strlen(json_string));\r
+ int ret= post_data_by_get_file(json_string,strlen(json_string));\r
\r
cJSON_free(json_string);\r
-}\r
\r
+ if(ret==200)\r
+ {\r
+ aut_login_time=timestamp;\r
\r
-// void aut_chack_token(void)//检查token\r
-// {\r
-\r
-// }\r
- \r
-//每小时更新一次登录\r
-static void LOGIN_1H_timeout(void *param)\r
-{\r
- // if (sizeof(dev_pass) == 0)\r
- // aut_active();//没有密钥走激活\r
- // //每小时登录一次\r
- // aut_login();\r
- dev_authentication_MSG_put(NULL,0,AUT_LOGIN);\r
+ return true;\r
+ }\r
+ else\r
+ {\r
+ return false;\r
+ }\r
}\r
-// static aos_thread_id dev_authentication_id = 0;\r
-// static aos_queue_ptr dev_authentication_task_queue = NULL;\r
-//鉴权消息发送\r
-void dev_authentication_MSG_put(const char *data,uint32_t len,dev_authentication_MSG_Type MSG_Type)\r
+\r
+\r
+bool read_dev_pass(char *data_pass)\r
{\r
- dev_authentication_MSG_queue_t dev_authentication_MSG_queue_data = {0};\r
- //bk_msg_printf("dev_authentication_MSG_put1 MSG_Type:%d",MSG_Type);\r
- if(len >0)\r
+ char buf[512]={0};\r
+\r
+ FILE *fp=fopen(AUTH_ACTIVE,"rb+");\r
+ int read_size;\r
+\r
+ uint32_t pack=512;\r
+\r
+ if(fp==NULL)\r
+ {\r
+ return false;\r
+ }\r
+ \r
+ memset_s(buf,512,0,512);\r
+ read_size=fread(buf,1,512,fp);\r
+ if(read_size!=0)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "buf %d %s",read_size,buf); \r
+ }\r
+ fclose(fp);\r
+\r
+ char *p=buf;\r
+ while (*p!='{' && *p !='\0')\r
+ {\r
+ p++;\r
+ }\r
+\r
+ cJSON* root = cJSON_Parse((const char *)p);\r
+ if (root == NULL) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"解析失败\n");\r
+ return false;\r
+ }\r
+ char *password_str=NULL;\r
+ char * nonce_str=0;\r
+\r
+ cJSON* data = cJSON_GetObjectItem(root, "data");\r
+ if (data)\r
+ {\r
+ cJSON* password = cJSON_GetObjectItem(data, "password");\r
+ if (password && cJSON_IsString(password)) {\r
+ password_str= password->valuestring;\r
+ }\r
+\r
+ cJSON* nonce = cJSON_GetObjectItem(data, "nonce");\r
+ if (nonce && cJSON_IsString(nonce)) {\r
+ nonce_str = nonce->valuestring;\r
+ }\r
+ \r
+ }\r
+\r
+ int dev_pass_len =64;\r
+ char *dev_pass =(char *)malloc(dev_pass_len);\r
+ if(dev_pass)\r
{\r
- dev_authentication_MSG_queue_data.data = (char *)malloc(len+1);\r
- memset(dev_authentication_MSG_queue_data.data ,0,len+1);\r
- if(!dev_authentication_MSG_queue_data.data)\r
+ memset(dev_pass,0,dev_pass_len);\r
+ if(strlen(nonce_str)>8 && strlen(password_str)>8)\r
{\r
- //bk_msg_printf("AI_VC_send_data malloc ERROR!!!!!!!!!!");\r
- return ;\r
+ aes_cbc_pkcs5_decrypt(password_str, "4EepovakpbqhZUnUDwH42KAADYGv4UUe", nonce_str,dev_pass,&dev_pass_len);//解密\r
+ dev_pass[dev_pass_len] = 0;\r
+ printf("dev_pass:%s dev_pass_len:%d\n",dev_pass,dev_pass_len);\r
}\r
- memcpy(dev_authentication_MSG_queue_data.data,data,len);\r
- dev_authentication_MSG_queue_data.len=len;\r
+ \r
+ }else\r
+ {\r
+ printf("dev_pass malloc error!!!!!!!!!!!");\r
}\r
- \r
- dev_authentication_MSG_queue_data.MSG_Type=MSG_Type;\r
- // if(dev_authentication_task_queue && AOS_SUCCESS!=aos_send_to_queue(dev_authentication_task_queue,&dev_authentication_MSG_queue_data,AOS_NO_WAIT))\r
+\r
+ if(strlen(password_str)>=0)\r
{\r
- if(!dev_authentication_MSG_queue_data.data)\r
- free(dev_authentication_MSG_queue_data.data);\r
- return ;\r
+ memcpy(data_pass,dev_pass,dev_pass_len);\r
+ free(dev_pass);\r
+ return true;\r
}\r
- //bk_msg_printf("dev_authentication_MSG_put2 MSG_Type:%d",MSG_Type);\r
- return ;\r
+ \r
+ return false;\r
}\r
-static void dev_authentication_task(void *thread_input)//鉴权逻辑线程\r
+\r
+// {"success":true,"msg":"登录成功","code":20001,"data":{"deviceId":"28110601009b","token":"95fc6dcdf5a3e9a48df535453efd097c19"}}\r
+\r
+bool read_dev_token(char *data_token)\r
{\r
- dev_authentication_MSG_queue_t dev_authentication_msg = {0};\r
- //ase_encrypt_demo();\r
- //dev_NTP();//获取时间\r
- //aut_active();//激活\r
- aut_login();//登录\r
- // if(LOGIN_1H_timer == NULL)\r
- // {\r
- // LOGIN_1H_timer = aos_create_timer("AI_VC_1S_timer",\r
- // LOGIN_1H_timeout, &LOGIN_1H_timer,\r
- // 60000*60,\r
- // AOS_AUTO_ACTIVATE, AOS_BE_PERIOD);\r
- // aic_assert(LOGIN_1H_timer);\r
- // }\r
+ time_t timestamp;\r
+ timestamp = time(NULL);\r
\r
- // /**\r
- // * 原来已激活过了...AuthVo(password=rPbSCNTIVYWKso6I5+6l0KIbSiIembg3p10IEny2UVg=, deviceId=860132061481751, nonce=xiRqXDqkqGFodIiw)\r
- // */\r
- // while (1) {\r
- // if(dev_authentication_task_queue)\r
- // {\r
- // aos_recv_from_queue(dev_authentication_task_queue,&dev_authentication_msg,AOS_WAIT_FOREVER) ;\r
- // switch (dev_authentication_msg.MSG_Type)\r
- // {\r
- // case AUT_ACTIVE://激活\r
- // aut_active();\r
- // break;\r
- // case AUT_LOGIN://登录\r
- // aut_login();\r
- // break;\r
- // // case AUT_CHACK_TOKEN://检查token\r
- // // aut_chack_token();\r
- // // break;\r
- // }\r
- // if(dev_authentication_msg.data)\r
- // free(dev_authentication_msg.data);\r
- // }else\r
- // {\r
- // aos_sleep(10);\r
- // }\r
- // }\r
+ if(timestamp - aut_login_time > 60 * 60 )\r
+ {\r
+ return false;\r
+ }\r
+\r
+ char buf[512]={0};\r
+\r
+ FILE *fp=fopen(AUTH_SIGN_IN,"rb+");\r
+ int read_size;\r
+\r
+ uint32_t pack=512;\r
+\r
+ if(fp==NULL)\r
+ {\r
+ return false;\r
+ }\r
+ \r
+ memset_s(buf,512,0,512);\r
+ read_size=fread(buf,1,512,fp);\r
+ if(read_size!=0)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "buf %d %s",read_size,buf); \r
+ }\r
+ fclose(fp);\r
+\r
+ char *p=buf;\r
+ while (*p!='{' && *p !='\0')\r
+ {\r
+ p++;\r
+ }\r
+\r
+ cJSON* root = cJSON_Parse((const char *)p);\r
+ if (root == NULL) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"解析失败\n");\r
+ return false;\r
+ }\r
+ char *token_str=NULL;\r
+\r
+ cJSON* data = cJSON_GetObjectItem(root, "data");\r
+ if (data)\r
+ {\r
+ cJSON* token = cJSON_GetObjectItem(data, "token");\r
+ if (token && cJSON_IsString(token)) {\r
+ token_str= token->valuestring;\r
+ }\r
+ }\r
+\r
+ if(strlen(token_str)>=0 && data_token!=NULL )\r
+ {\r
+ memcpy(data_token,token_str,strlen(token_str));\r
+ return true;\r
+ }\r
+ \r
+ return true;\r
}\r
-void dev_authentication_init(void)\r
+\r
+void read_file_put(void )\r
{\r
- // //创建设备激活队列\r
- // if(dev_authentication_task_queue == NULL)\r
- // {\r
- // dev_authentication_task_queue = aos_create_queue("dev_authentication_task_queue",\r
- // sizeof(dev_authentication_MSG_queue_t),\r
- // 200);\r
- // }\r
- // dev_authentication_id = aos_create_thread(\r
- // "dev_authentication_task",\r
- // dev_authentication_task,\r
- // &dev_authentication_id,\r
- // 4096u,\r
- // 0,\r
- // NULL,\r
- // 35,\r
- // AOS_AUTO_START);\r
+ char buf[1024]={0};\r
+\r
+ FILE *fp=fopen(AUTH_SIGN_IN,"rb+");\r
+ int read_size;\r
+\r
+ uint32_t pack=1024;\r
+\r
+ if(fp==NULL)\r
+ {\r
+ return;\r
+ }\r
+ do\r
+ {\r
+ memset_s(buf,1024,0,1024);\r
+ read_size=fread(buf,1,1024,fp);\r
+\r
+ if(read_size!=0)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "buf %d %s",read_size,buf); \r
+ }\r
+ \r
+ } while (read_size==1024);\r
+ fclose(fp);\r
+\r
}\r
+\r
+\r
+\r
#ifdef __cplusplus\r
}\r
#endif /* __cplusplus */
\ No newline at end of file
extern "C" {\r
#endif /* __cplusplus */\r
\r
+\r
+#define AUTH_ACTIVE "/user/userdata/ota_report_.json"//上报升级得到的json\r
+\r
+#define AUTH_SIGN_IN "/user/userdata/sign_in.json"//上报升级得到的json\r
+\r
void active_md5_sign_demo(void);\r
\r
void dev_authentication_init(void);\r
}dev_authentication_MSG_queue_t;\r
void dev_authentication_MSG_put(const char *data,uint32_t len,dev_authentication_MSG_Type MSG_Type);\r
\r
-void aut_active(void);//设备激活;\r
-void aut_login(void);//设备激活;\r
+bool aut_active(void);//设备激活;\r
+bool aut_login(void);//设备激活;\r
\r
void system_init(void);\r
\r
#include "cmsis_os2.h"
#include "cat1_ctl.h"
#include "wearable_log.h"
+#include "dev_authentication.h"
#ifdef __cplusplus
extern "C" {
#define POST_URL "/dev/auth/sign_in"//登录接口
-#define AUTH_ACTIVE "/user/userdata/ota_report_.json"//上报升级得到的json
-#define AUTH_SIGN_IN "/user/userdata/sign_in.json"//上报升级得到的json
osSemaphoreId_t put_done_sem;
return rett;
}
}
-// {"success":true,
-// "msg":"激活成功.",
-// "code":20000,
-// "data":
-// {"password":
-// "mCx3DK7AqNyCXiP7/Iim4X4/e2Y5h/ZA4n9qLN3V4Z0=",
-// "deviceId":"28110601009b","nonce":"OlhdyxEkdqJVPyvr"}
-// }
-extern int aes_cbc_pkcs5_decrypt(const char *Base64_str_input,const char* str_key,const char* str_iv,char *output,int *output_len);
-
-bool read_dev_pass(char *data_pass)
-{
- char buf[512]={0};
-
- FILE *fp=fopen(AUTH_ACTIVE,"rb+");
- int read_size;
-
- uint32_t pack=512;
-
- if(fp==NULL)
- {
- return false;
- }
-
- memset_s(buf,512,0,512);
- read_size=fread(buf,1,512,fp);
- if(read_size!=0)
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "buf %d %s",read_size,buf);
- }
- fclose(fp);
-
- char *p=buf;
- while (*p!='{' && *p !='\0')
- {
- p++;
- }
-
- cJSON* root = cJSON_Parse((const char *)p);
- if (root == NULL) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"解析失败\n");
- return false;
- }
- char *password_str=NULL;
- char * nonce_str=0;
-
- cJSON* data = cJSON_GetObjectItem(root, "data");
- if (data)
- {
- cJSON* password = cJSON_GetObjectItem(data, "password");
- if (password && cJSON_IsString(password)) {
- password_str= password->valuestring;
- }
-
- cJSON* nonce = cJSON_GetObjectItem(data, "nonce");
- if (nonce && cJSON_IsString(nonce)) {
- nonce_str = nonce->valuestring;
- }
-
- }
-
- int dev_pass_len =64;
- char *dev_pass =(char *)malloc(dev_pass_len);
- if(dev_pass)
- {
- memset(dev_pass,0,dev_pass_len);
- if(strlen(nonce_str)>8 && strlen(password_str)>8)
- {
- aes_cbc_pkcs5_decrypt(password_str, "4EepovakpbqhZUnUDwH42KAADYGv4UUe", nonce_str,dev_pass,&dev_pass_len);//解密
- dev_pass[dev_pass_len] = 0;
- printf("dev_pass:%s dev_pass_len:%d\n",dev_pass,dev_pass_len);
- }
-
- }else
- {
- printf("dev_pass malloc error!!!!!!!!!!!");
- }
-
- if(strlen(password_str)>=0)
- {
- memcpy(data_pass,dev_pass,dev_pass_len);
- free(dev_pass);
- return true;
- }
-
- return false;
-}
-
-// {"success":true,"msg":"登录成功","code":20001,"data":{"deviceId":"28110601009b","token":"95fc6dcdf5a3e9a48df535453efd097c19"}}
-
-bool read_dev_token(char *data_token)
-{
- char buf[512]={0};
-
- FILE *fp=fopen(AUTH_SIGN_IN,"rb+");
- int read_size;
- uint32_t pack=512;
-
- if(fp==NULL)
- {
- return false;
- }
-
- memset_s(buf,512,0,512);
- read_size=fread(buf,1,512,fp);
- if(read_size!=0)
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "buf %d %s",read_size,buf);
- }
- fclose(fp);
-
- char *p=buf;
- while (*p!='{' && *p !='\0')
- {
- p++;
- }
-
- cJSON* root = cJSON_Parse((const char *)p);
- if (root == NULL) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"解析失败\n");
- return false;
- }
- char *token_str=NULL;
-
- cJSON* data = cJSON_GetObjectItem(root, "data");
- if (data)
- {
- cJSON* token = cJSON_GetObjectItem(data, "token");
- if (token && cJSON_IsString(token)) {
- token_str= token->valuestring;
- }
- }
-
- if(strlen(token_str)>=0)
- {
- memcpy(data_token,token_str,strlen(token_str));
- return true;
- }
-
- return false;
-}
-
-void read_file_put(void )
-{
- char buf[1024]={0};
-
- FILE *fp=fopen(AUTH_SIGN_IN,"rb+");
- int read_size;
-
- uint32_t pack=1024;
-
- if(fp==NULL)
- {
- return;
- }
- do
- {
- memset_s(buf,1024,0,1024);
- read_size=fread(buf,1,1024,fp);
-
- if(read_size!=0)
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "buf %d %s",read_size,buf);
- }
-
- } while (read_size==1024);
- fclose(fp);
-
-}