* @Author: luozheng 1732036298@qq.com
* @Date: 2024-06-20 15:14:50
* @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-10-15 19:02:09
+ * @LastEditTime: 2024-10-16 10:46:11
* @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AiVoiceModel.cpp
*/
#include "aivoice/include/AiVoiceModel.h"
{
AIResponseType = type;
errnote = str;
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AIResponseType = %d,errnote = %s\n", AIResponseType, errnote.c_str());
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AIResponseType = %d,errnote = %s\n", AIResponseType, errnote.c_str());
//如果是:AI录音解析错误或AI 回应错误 ,或者重传多次录音数据->跳转AI回应错误界面
if (AIResponseType == AiVoiceModel::AI_RECORDING_PARSING_ERROR || AIResponseType == AiVoiceModel::AI_RESPONSE_ERROR
|| AIResponseType == AiVoiceModel::AI_BLE_ERROR)
SendMsgToUIService(UI_AI_JUMP_TO_RESPONDERR_VIEW, 0, (void *)errnote.c_str(), errnote.length());
return;
}
+ else if(AiVoiceModel::AI_RESPONSE_END) //如果是AI 回应结束
+ {
+ if(errnote.empty()) //如果没有回应数据
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AiVoiceModel::GetErrnote is empty!!");
+ AiVoiceModel::GetInstance().SetErrnote("response data is empty");
+ std::string str = AiVoiceModel::GetInstance().GetErrnote();
+ SendMsgToUIService(UI_AI_JUMP_TO_RESPONDERR_VIEW, 0, (void *)str.c_str(), str.length());
+ return;
+ }
+ }
aiAnswerStr += str;
SendMsgToUIService(UI_UPDATE_AI_ANSWER_STR, 0, nullptr, 0);
}
* @Author: luozheng 1732036298@qq.com
* @Date: 2024-06-20 15:11:17
* @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-09-26 16:16:49
+ * @LastEditTime: 2024-10-16 15:13:54
* @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AiVoicePresenter.cpp
*/
#include "AppViewIDs.h"
#include <unistd.h>
#include "gfx_utils/mem_check.h"
+#include "bleService.h"
namespace OHOS
{
ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON);
// 开启一个60s取消长亮屏timer
model->ai_start_screen60s_timer();
+
+ uapi_ble_connect_param_update(10);
}
// 页面已经展示后的调用逻辑
model->StatusResume();
model->ai_stop_screen60s_timer();
model->stop_listening_timer();
+
+ uapi_ble_connect_param_update(50);
}
/*调转到返回结果界面*/
auto it = viewIdMap.find(viewId);
if (it != viewIdMap.end())
{
+ if(it->first == AIVOICERETURNRESULTTEXT_CONTINUECHAT_BUTTON_VIEW_ID) //点击继续对话按钮要发取消当前对话指令,避免AI回应中途按继续对话按钮没有取消上一次对话问题
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CancelCurAIChat");
+ AiVoiceModel::GetInstance().CancelCurAIChat();
+ }
ChangeViewAndLogicOperator(it->second.first, it->second.second);
return true;
}
* @Author: luozheng 1732036298@qq.com
* @Date: 2024-05-07 11:25:58
* @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-10-05 10:20:37
+ * @LastEditTime: 2024-10-16 11:37:43
* @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/AiVoice/src/AivoiceConnectTimeoutView.cpp
*/
#include "aivoice/include/AiVoicePresenter.h"
{
if (NoteLabel)
{
- NoteLabel->SetText("");
+ // NoteLabel->SetText("");
std::string text = AiVoiceModel::GetInstance().GetErrnote();
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "text = %s", text.c_str());
NoteLabel->SetText(text.c_str());
+ NoteLabel->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);
NoteLabel->Invalidate();
}
}
}\r
\r
static uint8_t AI_is_end_state=0;\r
-//发送AI录音准备就绪国内/\r
-/*使用模型:\r
-0:文心一言\r
-1:ChatGPT\r
-2:KIMI\r
-3:豆包*/\r
-bool send_AI_is_ready(uint8_t type)\r
-{\r
- \r
- if(AI_is_end_state==0)\r
- { \r
- printf("发送AI准备就绪\r\n");\r
- ble_data_type type_={0x05,0x05,1,1,1};\r
- send_big_data(type_,(char *)&type,1);\r
- AI_is_end_state=1;\r
- return true;\r
\r
- }\r
- else\r
- {\r
- printf("发送AI准备就绪失败,没有正确回复结束\r\n");\r
- return false;\r
- }\r
- \r
-\r
-\r
-\r
- //send_big_data(0, (char *)&type, 1, 1, 1, 1, 0x05, 5);\r
-}\r
//查询AI 模型是否可用,结果通过2AE4返回\r
/*使用模型:\r
0:文心一言\r
//send_big_data(0, (char *)&type, 1, 1, 1, 1, 0x06, 5);\r
}\r
\r
-void cancel_AI_cur_chat(void)\r
-{\r
- if(AI_is_end_state)\r
- {\r
- printf("取消当前AI对话\r\n");\r
- uint8_t data=1;\r
- ble_data_type type_={0x05,0x07,data_len,1,1};\r
- send_big_data(type_,(char *)&data,data_len);\r
- AI_is_end_state=0;\r
- \r
- }\r
- else\r
- {\r
- printf("已经取消当前AI对话无需再次取消\r\n");\r
- }\r
- \r
\r
- //send_big_data(0, (char *)&data, 1, 1, 1, 1, 0x07, 5);\r
-}\r
\r
\r
//发送ble数据\r
}\r
\r
\r
+void cancel_AI_cur_chat(void)\r
+{\r
+ blesrv_service_recv_msg_handler(0xff,(uint8_t*)"AI_cancel_AI",13);\r
+ return;\r
+ //send_big_data(0, (char *)&data, 1, 1, 1, 1, 0x07, 5);\r
+}\r
+\r
void free_ble_data_Event(void)//以防断开蓝牙没有释放数据类型\r
{\r
\r
\r
}\r
\r
+//发送AI录音准备就绪国内/\r
+/*使用模型:\r
+0:文心一言\r
+1:ChatGPT\r
+2:KIMI\r
+3:豆包*/\r
+bool send_AI_is_ready_(uint8_t type)\r
+{\r
+ \r
+ if(AI_is_end_state==0)\r
+ { \r
+ printf("发送AI准备就绪\r\n");\r
+ ble_data_type type_={0x05,0x05,1,1,1};\r
+ send_big_data(type_,(char *)&type,1);\r
+ AI_is_end_state=1;\r
+ return true;\r
+ }\r
+ else\r
+ {\r
+ printf("发送AI准备就绪失败,没有正确回复结束\r\n");\r
+ return false;\r
+ }\r
+ //send_big_data(0, (char *)&type, 1, 1, 1, 1, 0x05, 5);\r
+}\r
+\r
+static uint8_t AI_is_ready_type=0;\r
+\r
+bool send_AI_is_ready(uint8_t type)\r
+{\r
+ AI_is_ready_type=type;\r
+ blesrv_service_recv_msg_handler(0xff,(uint8_t*)"AI_is_ready",12);\r
+ return true;\r
+}\r
+\r
+void cancel_AI_cur_chat_(void)\r
+{\r
+ if(AI_is_end_state)\r
+ {\r
+ printf("取消当前AI对话\r\n");\r
+ uint8_t data=1;\r
+ ble_data_type type_={0x05,0x07,data_len,1,1};\r
+ send_big_data(type_,(char *)&data,data_len);\r
+ AI_is_end_state=0;\r
+ \r
+ }\r
+ else\r
+ {\r
+ printf("已经取消当前AI对话无需再次取消\r\n");\r
+ }\r
+ \r
+\r
+ //send_big_data(0, (char *)&data, 1, 1, 1, 1, 0x07, 5);\r
+}\r
\r
//接收app下发的原始数据 \r
void revBleOldData(uint8_t *buf, uint16_t event_size,uint16_t handle)//每包的数据大小\r
printf("handle :%d %s event_size %d\r\n",handle,getHandlname(handle),event_size);\r
if(handle==0xff)\r
{\r
- free_ble_data_Event();\r
+ if(strcmp("AI_cancel_AI",(char *)buf)==0)\r
+ {\r
+ cancel_AI_cur_chat_();\r
+ }\r
+ else if(strcmp("AI_is_ready",(char *)buf)==0)\r
+ {\r
+ send_AI_is_ready_(AI_is_ready_type);\r
+ }\r
+ else\r
+ {\r
+ free_ble_data_Event();\r
+ }\r
+ \r
return;\r
}\r
\r
\r
\r
Bleconnect = GAP_BLE_STATE_CONNECTED;//蓝牙已连接\r
- // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GAP_BLE_STATE_CONNECTED!!! 0x%x\r\n",pair_state); \r
-\r
- // gap_conn_param_update_t conn_param = { 0 };\r
- // conn_param.conn_handle = conn_id; /* param 0: conn_handle */\r
- // conn_param.interval_min =50; /* param 1: interval_min */\r
- // conn_param.interval_max = 50; /* param 2: interval_max */\r
- // conn_param.slave_latency = 6; /* param 3: slave_latency */\r
- // conn_param.timeout_multiplier = 700; /* param 4: timeout_multiplier */\r
- // ret = gap_ble_connect_param_update(&conn_param);\r
- // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"gap ble update connection parameters ret: %X\n", ret); \r
+ \r
\r
}\r
\r
{\r
gap_conn_param_update_t conn_param = { 0 };\r
conn_param.conn_handle = g_ble_conn_id; /* param 0: conn_handle */\r
- conn_param.interval_min =data; /* param 1: interval_min */\r
+ conn_param.interval_min =data; /* param 1: interval_min 10ms */\r
conn_param.interval_max = data; /* param 2: interval_max */\r
conn_param.slave_latency = 6; /* param 3: slave_latency */\r
conn_param.timeout_multiplier = 700; /* param 4: timeout_multiplier */\r
hand_watch_first_time_Paired();\r
svr_ble_adv_stop();\r
\r
- gap_conn_param_update_t conn_param = { 0 };\r
- conn_param.conn_handle = conn_id; /* param 0: conn_handle */\r
- conn_param.interval_min =150; /* param 1: interval_min */\r
- conn_param.interval_max = 150; /* param 2: interval_max */\r
- conn_param.slave_latency = 20; /* param 3: slave_latency */\r
- conn_param.timeout_multiplier = 160*32; /* param 4: timeout_multiplier */\r
- errcode_t ret = gap_ble_connect_param_update(&conn_param);\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"gap ble update connection parameters ret: %u\n", ret); \r
}\r
}\r
// uint16_t interval; /*!< @if Eng interval\r
ret=gatts_notify_indicate(g_ble_server_id, g_ble_conn_id, &data_info);\r
\r
if(ret!=ERRCODE_SUCC)\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "gatts_notify_indicate ret:0x%x. serverid:%u,conn_id:%u,handle:%u.data_len:%d", ret, g_ble_server_id,\r
- g_ble_conn_id, g_ble_server_handle,data_len);\r
+ {\r
+ msleep(200);\r
+ ret=gatts_notify_indicate(g_ble_server_id, g_ble_conn_id, &data_info);\r
+ if(ret!=ERRCODE_SUCC)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "gatts_notify_indicate ret:0x%x. serverid:%u,conn_id:%u,handle:%u.data_len:%d", ret, g_ble_server_id,\r
+ g_ble_conn_id, g_ble_server_handle,data_len);\r
+ ble_set_ai_Answer_str("BLE NOTIF ERROR",5);\r
+ }\r
+ }\r
}\r
}\r
return ret; \r
case 18:
test_paly(type_2);
break;
+ case 19:
+ uapi_ble_connect_param_update(type_2);
+ break;
default:
break;