#define PPG_FAILED (-1)
#include "app_at_process.h"
+#include "bk_websocket.h"
+
static int ConvertCmdToParam(uint8_t *para, uint32_t paraLen,
uint8_t argv[PPG_MAX_ARGC][PPG_MAX_ARGV_LEN], uint32_t* argc)
return 0;
}
+extern bool init_ai_task(void);
+
+extern errcode_t chat_server_init(void);
+static uint32_t wstest(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
+{
+ UNUSED(strCommonCmd);
+ uint8_t argv[PPG_MAX_ARGC][PPG_MAX_ARGV_LEN] = { 0 };
+ uint32_t argc = 0;
+
+ int ret = ConvertCmdToParam(para, paraLen, argv, &argc);
+ if (ret != PPG_SUCCESS) {
+ printf("CAT1TEST ATCMD Convert Command Failed\n");
+ return ERRCODE_FAIL;
+ }
+
+ init_ai_task();
+ return 0;
+}
+
+extern void send_ai_txt(uint8_t type,char *msg);
+
+static uint32_t ai_msg(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
+{
+ UNUSED(strCommonCmd);
+ uint8_t argv[PPG_MAX_ARGC][PPG_MAX_ARGV_LEN] = { 0 };
+ uint32_t argc = 0;
+ printf("ai_msg\n");
+ int ret = ConvertCmdToParam(para, paraLen, argv, &argc);
+ if (ret != PPG_SUCCESS) {
+ printf("CAT1TEST ATCMD Convert Command Failed\n");
+ return ERRCODE_FAIL;
+ }
+ send_ai_txt(0,(char *)argv[0]);
+
+ return 0;
+}
+#include "audio_capture_wrapper.h"
+
+static uint32_t start_record(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
+{
+ UNUSED(strCommonCmd);
+ uint8_t argv[PPG_MAX_ARGC][PPG_MAX_ARGV_LEN] = { 0 };
+ uint32_t argc = 0;
+ printf("ai_msg\n");
+ int ret = ConvertCmdToParam(para, paraLen, argv, &argc);
+ if (ret != PPG_SUCCESS) {
+ printf("CAT1TEST ATCMD Convert Command Failed\n");
+ return ERRCODE_FAIL;
+ }
+ uapi_start_asr();
+
+ streamingRecordAndSend_AI(0);
+
+ return 0;
+}
+
+
+
+static uint32_t start_asr(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
+{
+ UNUSED(strCommonCmd);
+ uint8_t argv[PPG_MAX_ARGC][PPG_MAX_ARGV_LEN] = { 0 };
+ uint32_t argc = 0;
+ printf("ai_msg\n");
+ int ret = ConvertCmdToParam(para, paraLen, argv, &argc);
+ if (ret != PPG_SUCCESS) {
+ printf("CAT1TEST ATCMD Convert Command Failed\n");
+ return ERRCODE_FAIL;
+ }
+ uapi_start_asr();
+
+
+
+ return 0;
+}
+extern void record_test(void);
+
+static uint32_t sendbindata(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
+{
+ UNUSED(strCommonCmd);
+ uint8_t argv[PPG_MAX_ARGC][PPG_MAX_ARGV_LEN] = { 0 };
+ uint32_t argc = 0;
+ printf("ai_msg\n");
+ int ret = ConvertCmdToParam(para, paraLen, argv, &argc);
+ if (ret != PPG_SUCCESS) {
+ printf("CAT1TEST ATCMD Convert Command Failed\n");
+ return ERRCODE_FAIL;
+ }
+ record_test();
+ return 0;
+}
static const at_cmd_table_t g_cat1_cmd[] = {
{ (char *)"AT^CAT1POWER", cat1_power, (char *)"1" },
{ (char *)"AT^CALLVOLUME", VoiceCallSetVolume, (char *)"1" },
{ (char *)"AT^CALLVOICE", VoiceCallcontrol, (char *)"1" },
{ (char *)"AT^TCPTEST", Tcptest, (char *)"1" },
-
+ { (char *)"AT^WSTEST", wstest, (char *)"1" },
+ { (char *)"AT^AI_MSG", ai_msg, (char *)"1" },
+ { (char *)"AT^AI_ASR", start_record, (char *)"1" },
+ { (char *)"AT^STARTASR", start_asr, (char *)"1" },
+ { (char *)"AT^SENDBINDATA", sendbindata, (char *)"1" },
};
at_cmd_table_t *get_cat1_cmd_table(uint32_t *cmd_count)
#include "custom_utils.h"
#include "broadcast_feature.h"
#include "cmsis_os2.h"
+#include "cat1_ctl.h"
+
#ifdef __cplusplus
extern "C" {
int ret = -1;
if(!frame)
{
- printf("send_websocket_message zalloc error");
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message zalloc error\r\n");
return -1;
}
// 第一个字节:FIN = 1, 设置 opcode
// 发送帧
if (send(client->sockfd, frame, offset, 0) < 0) {
- printf("send message failed");
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send message failed\r\n");
ret = -1;
goto send_websocket_message_ERROR;
}
cJSON* dataJSON = cJSON_CreateObject();
if (dataJSON == NULL) {
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"Error creating JSON object\n");
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"Error creating JSON object\n");
return;
}
char *jsonString = cJSON_PrintUnformatted(dataJSON);
if (jsonString == NULL) {
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"Error printing JSON to string\n");
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"Error printing JSON to string\n");
cJSON_Delete(dataJSON);
return;
}
cJSON_Delete(dataJSON);
if (data_len == 0) {
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"Error: JSON string length is 0\n");
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"Error: JSON string length is 0\n");
return;
}
// {"type":"middle","content":"我是","task_id":"","reasoning_content":""}
+char content_str_chat[64]={0};
bool chat_result_analysis(char *buf)
{
cJSON* type = cJSON_GetObjectItem(root, "type");
if (type && cJSON_IsString(type)) {
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"uid_t: %d\n", uid->valueint);
+
type_str= type->valuestring;
}
cJSON* content = cJSON_GetObjectItem(root, "content");
if (content && cJSON_IsString(content)) {
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"appid_t: %d\n", appid->valueint);
- content_str = root->valuestring;
+ content_str = content->valuestring;
+ }
+ if(strcmp("middle",type_str)==0)
+ {
+ memset_s(content_str_chat,64,0,64);
+ memcpy_s(content_str_chat,64,content_str,strlen(content_str));
+ ble_set_ai_Answer_str(content_str_chat,2);
+
}
-
- // if(is_end_bool==true)
- // {
- // send_ai_txt(0,result_str);
- // }
cJSON_Delete(root);
+ return true;
}
WebSocketMessageType type;
while (1)
{
+ memset_s(recv_buf,1024,0,1024);
receive_websocket_message(chat_client,(unsigned char *)recv_buf,1024,&type);
-
+ chat_result_analysis(recv_buf);
printf("bk_websocket_demo %s",recv_buf);
}
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="cat1_service_file";
+ taskcfg.attr.name="chat_server_init";
taskcfg.attr.priority = TASK_PRIORITY_APP;
taskcfg.attr.stack_size = CAT1_SERVICE_TASK_SIZE;
taskcfg.func = bk_websocket_demo;
if (send_websocket_message(asr_client,( const unsigned char *)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 succ erro\n");
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message erro\n");
}
//停止对话
void send_ai_bin(char *buf,uint32_t len)
{
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_ai_bin 0\n");
- if (send_websocket_message(asr_client,( const unsigned char *)buf,len,WS_BINARY)==0)
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message succ 0\n");
+ // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_ai_bin 0\n");
+ if (send_websocket_message(asr_client,( const unsigned char *)buf,len,WS_BINARY)==0)
+ {
+ bk_sleep(10);
+ }
+ // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message succ 0\n");
}
void record_test(void)
// "event":"SentenceEnd","result":{"result":"你好你好你好你好。",
// "is_end":true,"sentence_id":"fcb889fe74a0920efe14939de2fd2b1b",
// "start_time":760,"end_time":2280}}
+ char result_str_asr[256]={0};
bool aer_result_analysis(char *buf)
{
- cJSON* root = cJSON_Parse((const char *)buf);
+ cJSON* root = cJSON_Parse((const char *)buf);
if (root == NULL) {
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"解析失败\n");
return false;
}
cJSON* result = cJSON_GetObjectItem(root, "result");
- if (result && cJSON_IsString(result)) {
- result_str= result->valuestring;
- }
- cJSON* start_time = cJSON_GetObjectItem(root, "start_time");
- if (start_time && cJSON_IsNumber(start_time)) {
+ if (result)
+ {
+ cJSON* result_ = cJSON_GetObjectItem(result, "result");
- start_time_int = root->valueint;
- }
- cJSON* end_time = cJSON_GetObjectItem(root, "end_time");
- if (end_time && cJSON_IsNumber(end_time)) {
- end_time_int = end_time->valueint;
+ 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;
+ }
}
-
- cJSON* is_end = cJSON_GetObjectItem(root, "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\n",result_str,start_time_int,end_time_int,is_end_bool);
+
+ 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)
{
- send_ai_txt(0,result_str);
+ memset_s(result_str_asr,256,0,256);
+ memcpy_s(result_str_asr,256,result_str,strlen(result_str));
+ ble_set_ai_Question_str(result_str_asr);
+ send_ai_txt(0,result_str_asr);
}
if(strcmp(event_str,"TranscriptionStarted")==0)
{
SendMsgToUIService(UI_AI_JUMP_TO_LISTENING_VIEW, 0, &state, sizeof(bool));
}
cJSON_Delete(root);
+ return true;
}
+uint8_t is_bk_websocket_asr=0;
+
+
void bk_websocket_asr(void *data) {
- while (1)
+ // while (1)
+ is_bk_websocket_asr=1;
+
{
asr_client = init_websocket_client("ws://118.145.158.207:22080/asr/ws",NULL);
if (asr_client== NULL) {
- continue ;
+ bk_sleep(10);
+ // continue ;
+ is_bk_websocket_asr=0;
+ return;
}
+ uapi_cat1_keep_wakeup(1);
WebSocketMessageType type;
while (1)
// if(type==WS_CONT ||
if( type==WS_CLOSE)
{
+ printf("WS_CLOSE bk_websocket_asr\r\n");
break;
}
+ printf("WS_CLOSE bk_websocket_asr %d\r\n",type);
+
aer_result_analysis(asr_recv_buf);
- printf("bk_websocket_demo %s %d",asr_recv_buf,type);
+ // printf("bk_websocket_demo %s %d",asr_recv_buf,type);
}
close_websocket_client(asr_client);
asr_client=NULL;
- continue ;
+ // return;
}
+ is_bk_websocket_asr=0;
}
errcode_t asr_server_init(void)
{
- if(asr_client)
+ if(is_bk_websocket_asr)
{
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");
+ 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="cat1_service_file";
+ taskcfg.attr.name="asr_server_init";
taskcfg.attr.priority = TASK_PRIORITY_APP;
taskcfg.attr.stack_size = CAT1_SERVICE_TASK_SIZE;
taskcfg.func = bk_websocket_asr;
return ERRCODE_SUCC;
}
+static uint8_t is_init_ai=1;
bool init_ai_task(void)
{
- asr_server_init();
- chat_server_init();
+ if(is_init_ai)
+ {
+ asr_server_init();
+ chat_server_init();
+ // is_init_ai=0;
+ }
+
+ return true;
+
+
}