return malloc(len);
}
- void uapi_start_tts_single_txt(char *buf);
+void uapi_start_tts_single_txt(char *buf);
+void uapi_start_tts_single(void);
+
+uint8_t server_state=0;
// free
if (send_websocket_message(chat_client,( const unsigned char *)jsonString,strlen(jsonString),WS_TEXT)==0)
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message succ 0\n");
+ else
+ {
+ if(chat_client==NULL)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"chat_client is NULL\n");
+ }
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message fail\n");
+ }
cJSON_free(jsonString);
}
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);
- uapi_start_tts_single_txt(content_str_chat);
-
+ // uapi_start_tts_single_txt(content_str_chat);
+ static uint8_t test=1;
+ if(test)
+ {
+ uapi_start_tts_single();
+ test=0;
+ }
+
}
}
/* code */
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;
- }
+ // 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)
{
- chat_client = init_websocket_client(url_buf,NULL,1);
+ // http://118.145.158.207:22080ws://118.145.158.207:22080/chat/ws
+ chat_client = init_websocket_client("ws://118.145.158.207:22080/chat/ws",NULL,0);
if (chat_client== NULL) {
client_count--;
return;
}
+ server_state=0x02^server_state;
+ if(server_state==0b00000111)
+ {
+ // uapi_start_asr();
+ }
+
// send_ai_txt(1,"你是谁");
#include "common_def.h"
#include "los_printf.h"
-#define CAT1_SERVICE_TASK_SIZE (0x1000*1)
+#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)
// http://118.145.158.207:22080ws://amp.raisound.com/asr/ws
-char asr_recv_buf[1024]={0};
+char *asr_recv_buf=NULL;//[1024]={0};
WebSocketClient *asr_client;
int32_t uapi_tts_paly_init(void);
else
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message erro\n");
- uapi_tts_paly_stop();
+ // uapi_tts_paly_stop();
}
//停止对话
// WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message succ 0\n");
bk_sleep(10);
}
+ else
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message fail 0\n");
+ }
//
}
SendMsgToUIService(UI_AI_JUMP_TO_RESULT_VIEW, 0, nullptr, 0);//先跳转到结果界面
ble_set_ai_Question_str(result_str_asr);
send_ai_txt(0,result_str_asr);
+
+ uapi_stop_asr();
+ stop_AudioCaptureProcess_AI();
}
if(strcmp(event_str,"TranscriptionStarted")==0)
{
//查询结果
// streamingRecordAndSend_AI(0);
- bool state = true;
- SendMsgToUIService(UI_AI_JUMP_TO_LISTENING_VIEW, 0, &state, sizeof(bool));
+ // bool state = true;
+ // SendMsgToUIService(UI_AI_JUMP_TO_LISTENING_VIEW, 0, &state, sizeof(bool));
+ startAudioCaptureTask();
+ }
+ if(strcmp(event_str,"Failed")==0)
+ {
+ stop_AudioCaptureProcess_AI();
}
+
cJSON_Delete(root);
return true;
{
return false;
}
-
}
+
+
+
void bk_websocket_asr(void *data) {
// while (1)
{
//ws://amp.raisound.com/asr/ws
- char url_buf[124]={0};
- if(asr_ws_url_init(url_buf))
- {
- printf("%s\r\n",url_buf);
- }
- else
- {
- return;
- }
+ // char url_buf[124]={0};
+ // if(asr_ws_url_init(url_buf))
+ // {
+ // printf("%s\r\n",url_buf);
+ // }
+ // else
+ // {
+ // return;
+ // }
uint8_t client_count=3;
while (client_count)
{
- // asr_client = init_websocket_client("ws://118.145.158.207:22080/asr/ws",NULL,0);
- asr_client = init_websocket_client(url_buf,NULL,1);
+ asr_client = init_websocket_client("ws://118.145.158.207:22080/asr/ws",NULL,0);
+ // 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--;
uapi_cat1_keep_wakeup(1);
+ server_state=0x01^server_state;
+ if(server_state==0b00000111)
+ {
+ // uapi_start_asr();
+ }
+
+ asr_recv_buf=(char *)malloc(0x400);
+
// uapi_start_asr();
// SendMsgToUIService(UI_4G_AI_INIT_STAUS, 0,&state, sizeof(bool));
//
}
-
+ free(asr_recv_buf);
close_websocket_client(asr_client);
asr_client=NULL;
// return;
taskcfg.create_queue_handle = NULL;
taskcfg.attr.name="asr_server_init";
taskcfg.attr.priority = TASK_PRIORITY_APP;
- taskcfg.attr.stack_size = CAT1_SERVICE_TASK_SIZE;
+ taskcfg.attr.stack_size = 0x1000;
taskcfg.func = bk_websocket_asr;
taskcfg.use_mem = USE_EXTEND_MEM;
return;
}
- uapi_start_tts_single();
+ server_state=0x04^server_state;
+ if(server_state==0b00000111)
+ {
+ // uapi_start_asr();
+ }
+
+
char* tts_recv_buf=(char *)malloc(1024*4);
while (1)
taskcfg.create_queue_handle = NULL;
taskcfg.attr.name="tts_server_init";
taskcfg.attr.priority = TASK_PRIORITY_APP;
- taskcfg.attr.stack_size = CAT1_SERVICE_TASK_SIZE;
+ taskcfg.attr.stack_size = 0x1000;
taskcfg.func = bk_websocket_tts;
taskcfg.use_mem = USE_EXTEND_MEM;
if(is_init_ai)
{
uapi_tts_paly_init();
- // asr_server_init();
- // chat_server_init();
+ asr_server_init();
+ chat_server_init();
tts_server_init();
// is_init_ai=0;
}
\r
// 输出JSON\r
printf("JSON output: %s\n", json_string);\r
- extern void put_data_by_get_file(char *data,uint16_t data_len);\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
+\r
+\r
}\r
\r
\r
\r
extern bool read_dev_pass(char *data_pass);\r
-extern void post_data_by_get_file(char *data,uint16_t data_len);\r
+extern uint32_t post_data_by_get_file(char *data,uint16_t data_len);\r
\r
\r
void aut_login(void)//登录\r
#define AUTH_SIGN_IN "/user/userdata/sign_in.json"//上报升级得到的json
+osSemaphoreId_t put_done_sem;
+static uint32_t put_srv_res=0;
+osSemaphoreId_t post_done_sem;
+
+static uint32_t post_srv_res=0;
+
static httpc_connection_t settings = {0};
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "httpc_download_result_ui");
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"httpc_download_result , httpc_result_t %d, rx_content_len %d , srv_res %d, err %d\n",
httpc_result,rx_content_len,srv_res,err);
- if(srv_res==200)
+ // if(srv_res==200)
{
+ put_srv_res=srv_res;
+
+ (void)osSemaphoreRelease(put_done_sem);
//激活成功
}
return ;
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "httpc_download_result_ui");
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"httpc_download_result , httpc_result_t %d, rx_content_len %d , srv_res %d, err %d\n",
httpc_result,rx_content_len,srv_res,err);
- if(srv_res==200)
+ // if(srv_res==200)
{
+ post_srv_res=srv_res;
+
+ (void)osSemaphoreRelease(post_done_sem);
+
//登录成功
}
return ;
-void put_data_by_get_file(char *data,uint16_t data_len)
+uint32_t put_data_by_get_file(char *data,uint16_t data_len)
{
+
memset_s(&settings,sizeof(settings),0,sizeof(settings));
settings.use_proxy=0;
(const char*) otadatapath,
&connection);
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"custom_start_ota_download %d \r\n",rett);
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "use_put");
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "use_put");
+
+ if(rett==0)
+ {
+ put_done_sem = osSemaphoreNew(1, 0, NULL);
+
+ osSemaphoreAcquire(put_done_sem, 1000*30);
+
+ osSemaphoreDelete(put_done_sem);
+ return put_srv_res;
+ }
+ else
+ {
+ return rett;
+ }
}
-void post_data_by_get_file(char *data,uint16_t data_len)
+uint32_t post_data_by_get_file(char *data,uint16_t data_len)
{
memset_s(&settings,sizeof(settings),0,sizeof(settings));
settings.use_proxy=0;
&connection);
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"custom_start_ota_download %d \r\n",rett);
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "use_post");
+
+ if(rett==0)
+ {
+ post_done_sem = osSemaphoreNew(1, 0, NULL);
+
+ osSemaphoreAcquire(post_done_sem, 1000*30);
+
+ osSemaphoreDelete(post_done_sem);
+
+ return post_srv_res;
+ }
+ else
+ {
+ return rett;
+ }
}
// {"success":true,
// "msg":"激活成功.",
g_voiceCallVolteContext = nullptr;
}
}
+#include "audio_capturer.h"
+static std::shared_ptr<OHOS::Audio::AudioCapturer> g_audioCap;
static int32_t RunVoiceCallVolteAI(VoiceCallVolteContext *context)
int32_t ret ;
g_stream_out_downink = std::make_shared<AudioStreamOut>();
+
+
+ if (ret != 0) {
+ MEDIA_ERR_LOG("audio stream out uplink init failed");
+ }
+
// 16000 32000 44100 48000
- AudioRendererConfig renderConfig = {};
+ AudioRendererConfig renderConfig = {};
renderConfig.audioFormat = PCM;
renderConfig.channelCount = 1;
renderConfig.linkDir = AUDIO_DOWN_LINK;
MEDIA_ERR_LOG("audio stream out downink play failed");
}
-
// uint32_t asiDownlinkChannelId = 0;
// MEDIA_INFO_LOG("asiDownlinkChannelId: 0x%x", asiDownlinkChannelId);
return nullptr;
}
+#include "bleService.h"
+static uint32_t AI_audio_size=0;
+static uint8_t Cur_AI_Model= 0;
+
+uint8_t g_sample_needStop=0;
+
+uint8_t AudioCaptureTask_is_run=0;
+
+void stop_AudioCaptureProcess_AI(void)
+{
+ g_sample_needStop=1;
+}
+
+static void* AudioCaptureProcess_AI(void* arg)
+{
+ MEDIA_ERR_LOG("AudioCaptureProcess_AI");
+
+ (void)g_stream_in_uplink.reset();
+
+ g_stream_in_uplink = std::make_shared<AudioStreamIn>();
+
+
+ CapturerInputConfig captureConfig = {};
+ captureConfig.audioFormat = MP3;
+ captureConfig.channelCount = 1;
+ captureConfig.linkDir = AUDIO_UP_LINK;
+ captureConfig.sampleRate = 16000;
+ captureConfig.sessionID = g_sessionId;
+ captureConfig.streamType = AUDIO_STREAM_VOICE_ASSISTANT;
+
+ int ret = g_stream_in_uplink->Init(captureConfig);
+
+
+ // AI_data_assembly(1,start_data, Cur_AI_Model);
+ ret = g_stream_in_uplink->Start();
+ if (ret != 0) {
+ MEDIA_ERR_LOG("audio stream out downink play failed");
+ return NULL;
+
+ }
+ MEDIA_ERR_LOG("g_stream_in_uplink->Start");
+
+ uint8_t* data_buf=(uint8_t *)malloc(1024);
+
+ MEDIA_ERR_LOG("malloc");
+
+ AudioCaptureTask_is_run=1;
+
+ while (!g_sample_needStop) {
+ LOS_Msleep(10);
+ CapturerBuffer capBuf = {};
+ capBuf.data = data_buf;
+ capBuf.size = 1024;
+ capBuf.frameCount = 1;
+ int32_t readlen = g_stream_in_uplink->ObtainBuffer(capBuf, true);
+ if(readlen>0)
+ {
+ // MEDIA_ERR_LOG("readlen %d",readlen);
+ send_msg_data_into_Ai_msg_queue((void *)data_buf,(uint16_t)readlen,0);
+ memset_s(data_buf,1024,0,1024);
+ }
+
+ // 蓝牙接口发送实时录音数据
+ }
+ free(data_buf);
+ MEDIA_ERR_LOG("AI_audio_size %d",AI_audio_size);
+
+ ret = g_stream_in_uplink->Stop();
+
+ g_stream_in_uplink->Release();
+
+ (void)g_stream_in_uplink.reset();
+
+ g_sample_needStop=0;
+
+ MEDIA_INFO_LOG("AudioCaptureProcess end");
+ AudioCaptureTask_is_run=0;
+ return NULL;
+}
+
+
+void startAudioCaptureTask(void)
+{
+ if(AudioCaptureTask_is_run)
+ {
+ MEDIA_ERR_LOG("AudioCaptureTask_is_run %d",AudioCaptureTask_is_run);
+ return;
+ }
+ MediaThreadattr attr = { "AudioCaptureTask", 0x1000, THREAD_SCHED_INVALID, 0, true };
+ MediaThreadCreate(AudioCaptureProcess_AI, NULL, &attr);
+}
+
int32_t AIStreamWrite(uint8_t *buf,uint32_t size)
MediaMutexUnLock(g_voiceCallVolteContextMutex);
// 3. create voice call volte thread
- MediaThreadattr attr = { "VoiceCallVolteHFPThread", 0x2000, THREAD_SCHED_INVALID, 0, false };
+ MediaThreadattr attr = { "VoiceCallVolteHFPThread", 0x1000, THREAD_SCHED_INVALID, 0, false };
g_voiceCallVolteContext->taskHandle = MediaThreadCreate(VoiceAIThread, g_voiceCallVolteContext, &attr);
if ( g_voiceCallVolteContext->taskHandle == nullptr) {
MEDIA_ERR_LOG("create voice call volte thread failed");
AudioSession get_ai_g_sessionId(void);
+void startAudioCaptureTask(void);
+
+void stop_AudioCaptureProcess_AI(void);
+
#ifdef __cplusplus
};
#endif
{ AUDIO_IN_COMMUNICATION, AUDIO_FORMAT_mSBC, 16000, 1 },
{ AUDIO_IN_COMMUNICATION, AUDIO_FORMAT_PCM_16_BIT, 8000, 1},
{ AUDIO_IN_COMMUNICATION, AUDIO_FORMAT_PCM_16_BIT, 16000, 1 },
+ { AUDIO_IN_COMMUNICATION, AUDIO_FORMAT_MP3, 16000, 1 },
};
static bool IsSupported(const struct PortPluginAttr *inputAttr)