extern bool read_dev_token(char *data_token);
errcode_t ai_system_init(void);
+void ai_system_deinit(void);
void ai_cleanup_resources(void);
uint32_t ai_get_memory_usage(void);
uint32_t ai_get_memory_usage_percent(void);
/* 创建信号量 */
queue->semaphore = osSemaphoreNew(WS_QUEUE_SIZE, 0, NULL);
if (!queue->semaphore) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to create semaphore for ws queue");
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to create semaphore for ws queue (size=%d)", WS_QUEUE_SIZE);
+
+
+
osMutexDelete(queue->mutex);
+ queue->mutex = NULL;
return -1;
}
{
int ret = 0;
+ // 检查是否已经初始化,避免重复初始化
+ if (chat_msg_queue.initialized || asr_msg_queue.initialized || tts_msg_queue.initialized) {
+ WEARABLE_LOGW(WEARABLE_LOG_MODULE_APP, "WebSocket queues already initialized, deinitializing first");
+ ws_queue_deinit(&chat_msg_queue);
+ ws_queue_deinit(&asr_msg_queue);
+ ws_queue_deinit(&tts_msg_queue);
+ }
+
ret |= ws_queue_init(&chat_msg_queue);
ret |= ws_queue_init(&asr_msg_queue);
ret |= ws_queue_init(&tts_msg_queue);
asr_need_stop=0;
asr_server_init();
+ uapi_start_asr();
if(chat_client==NULL)
{
uint32_t start_time = (uint32_t)osKernelGetTickCount();
uint32_t retry_count = 0;
- // 初始化互斥锁
+ // 检查互斥锁是否已存在,避免重复创建
if (!g_ai_mutex) {
g_ai_mutex = osMutexNew(NULL);
if (!g_ai_mutex) {
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to create AI mutex");
return;
}
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "AI mutex created in bk_websocket_demo");
}
AI_LOCK();
if(strcmp(event_str,"TranscriptionCompleted")==0) //asr 结束
{
cJSON_Delete(root);
- return false;
+ return true; // 返回true asr不断连
}
if(strcmp(event_str,"Failed")==0)
{
WebSocketMessageType type;
bool state = true;
-
+ASR_SATRT:
AI_LOCK();
is_bk_websocket_asr = 1;
AI_UNLOCK();
break;
}
-msleep(1000);
+ msleep(1000);
continue;
} else {
WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "ASR WebSocket connection established");
// timeout.tv_usec = (AI_RECEIVE_TIMEOUT_MS % 1000) * 1000;
// lwip_setsockopt(asr_client->sockfd, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout));
- uapi_start_asr();
+ // uapi_start_asr();
uint32_t last_activity = (uint32_t)osKernelGetTickCount();
msleep(10); // 避免过度占用CPU
}
-
+ if (disconnect_server == 0) {
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "Reconnecting ASR client...");
+ goto ASR_SATRT;
+ }
AI_LOCK();
set_ai_asr_service_init_flag(0);
AI_UNLOCK();
ai_cleanup_resources();
return false;
}
-
+ // 初始化ASR服务器
+ if (asr_server_init() != ERRCODE_SUCC) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to initialize asr server");
+ ai_cleanup_resources();
+ return false;
+ }
WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "AI task initialized successfully, type: %d", type);
}
tts_server_deinit();
// 清理AI系统资源
- ai_cleanup_resources();
+ ai_cleanup_resources();
+
WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "AI task deinitialized successfully");
}
// }
// 清理WebSocket消息队列
- // ws_queues_deinit_all();
+ ws_queues_deinit_all();
// 清理互斥锁
if (g_ai_mutex) {
AI_UNLOCK();
// 最后清理TCP管理器
- // tcp_simple_manager_deinit();
+ tcp_simple_manager_deinit();
WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "AI resources cleaned up");
}
return ERRCODE_FAIL;
}
- // 创建互斥锁
- g_ai_mutex = osMutexNew(NULL);
+ // 创建互斥锁(检查是否已存在)
if (!g_ai_mutex) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to create AI mutex");
- tcp_simple_manager_deinit(); // 清理TCP管理器
- return ERRCODE_FAIL;
+ g_ai_mutex = osMutexNew(NULL);
+ if (!g_ai_mutex) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to create AI mutex");
+ // tcp_simple_manager_deinit(); // 清理TCP管理器
+ return ERRCODE_FAIL;
+ }
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "AI mutex created in ai_system_init");
+ } else {
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "AI mutex already exists, reusing");
}
// 初始化内存使用统计
// 初始化WebSocket消息队列
if (ws_queues_init_all() != 0) {
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to initialize all WebSocket queues");
- osMutexDelete(g_ai_mutex);
+ if (g_ai_mutex) {
+ osMutexDelete(g_ai_mutex);
+ g_ai_mutex = NULL;
+ }
tcp_simple_manager_deinit(); // 清理TCP管理器
return ERRCODE_FAIL;
}