#include "lcd_qspi.h"
#include "pinctrl_porting.h"
#include "product_evb4_standard.h"
+ #include "gpio.h" // 添加GPIO控制头文件
#ifdef QSPI_DISPLAY
#define DPU_FRAME_BUFF_ADDR 0x60280000
#define DPU_STRIDER_DIVIDER 8
#define DISP_POWER_ON_DELAY_MS 10
+// 背光控制引脚定义
+#define LCD_BACKLIGHT_PWM_PIN S_AGPIO_L16 /* 背光PWM引脚 */
+
+// 直接控制背光函数
+static void recovery_lcd_backlight_on(void)
+{
+ PRINT("Turning on LCD backlight via GPIO control...\n");
+ uapi_pin_set_mode(LCD_BACKLIGHT_PWM_PIN, HAL_PIO_FUNC_GPIO);
+ uapi_gpio_set_dir(LCD_BACKLIGHT_PWM_PIN, GPIO_DIRECTION_OUTPUT);
+ uapi_gpio_set_val(LCD_BACKLIGHT_PWM_PIN, GPIO_LEVEL_HIGH); // 开启背光
+ PRINT("LCD backlight turned on via GPIO\n");
+}
+
static const lcd_bus_api g_recovery_display_api_mipi = {
.bus_init = mipi_bus_init,
.bus_deinit = mipi_bus_deinit,
ext_dpu_layer_info layer_info = {0};
#ifdef BOARD_LEINIAO
ext_rect update_rect = {0, 0, 360, 360}; // 定义一个局部区域
- #else
+ #else
ext_rect update_rect = {0, 0, 466, 466}; // 定义一个局部区域
#endif
- // ext_rect update_rect = {223, 223, 20, 20}; // 定义一个局部区域
+ //ext_rect update_rect = {0, 133, 180, 200}; // 定义一个局部区域
recovery_dispay_layer_and_surface_init(&surface, &layer_info, &update_rect);
// 设置layer全白色, 也可以使用接口 recovery_dispay_read_image_and_savein_surface 实现从文件系统读图片
uapi_lcd_deinit();
return;
}
+ recovery_lcd_backlight_on(); // 开启背光
}
HAND_DOWNLOAD_PROGRESS_NOTIFY, // 下载进度通知
HAND_AUDIO_PLAYBACK_START_NOTIFY, // 音频播放开始通知
HAND_AUDIO_PLAYBACK_END_NOTIFY, // 音频播放结束通知
+ HAND_AUDIO_RECORDING_END_NOTIFY, // 录音结束通知
HAND_NPC_EMOTION_CHANGE_NOTIFY, // npc表情变化通知
HAND_TIMELINE_STATUS_CHANGE_NOTIFY, // 时间线状态变化通知
MAX_NUM_HANDLER,
void OtaModel::CheckOtaResult(int status)
{
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OtaModel::CheckOtaResult");
+ uapi_setScreenDuration(30000); // 重新设置30秒自动息屏
if(status == 3)
{
OtaView::GetInstance()->ChangeView(OtaView::OTA_VIEW_UPDATING, OtaView::OTA_VIEW_UPDATE_FAILED);
{
if(OtaDownloadView::GetInstance())
{
+ uapi_setScreenDuration(30000); // 重新设置30秒自动息屏
OtaView::GetInstance()->ChangeView(OtaView::OTA_VIEW_DOWNLOAD, OtaView::OTA_VIEW_UPDATE_SUCCESS);
OtaSuccessView::GetInstance()->UpdateDownloadSuccess("下载成功");
}
{
if(OtaDownloadView::GetInstance())
{
+ uapi_setScreenDuration(30000); // 重新设置30秒自动息屏
OtaView::GetInstance()->ChangeView(OtaView::OTA_VIEW_DOWNLOAD, OtaView::OTA_VIEW_UPDATE_SUCCESS);
OtaSuccessView::GetInstance()->UpdateDownloadSuccess("下载失败");
}
// NPC表情变化处理函数
void HandleNpcEmotionChange(const char* emotion);
+ // 录音结束处理函数
+ void HandleAudioRecordingEnd();
+
// 将英文表情映射到英文文件名
std::string MapEmotionToFileName(const char* emotion);
}
if (RemindLabel)
{
- RemindLabel->SetPosition(132, 284, 96, 28);
+ RemindLabel->SetPosition(136, 275, 96, 25);
RemindLabel->SetText("按 退出");
RemindLabel->SetVisible(true);
}
}
if (RemindIcon2)
{
- RemindIcon2->SetPosition(105, 277, 22, 22);
+ RemindIcon2->SetPosition(159, 276, 22, 22);
RemindIcon2->SetSrc("/user/res/volume_down.bin");
RemindIcon2->SetVisible(true);
}
- if (RemindIcon3)
- {
- RemindIcon3->SetPosition(211, 276, 22, 22);
- RemindIcon3->SetSrc("/user/res/volume_up.bin");
- RemindIcon3->SetVisible(true);
- }
+ // if (RemindIcon3)
+ // {
+ // RemindIcon3->SetPosition(211, 276, 22, 22);
+ // RemindIcon3->SetSrc("/user/res/volume_up.bin");
+ // RemindIcon3->SetVisible(true);
+ // }
break;
}
case THUNDERBIRD_ADJUSTVIEW_NETWORK_CONNECTING:
ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON);
if (TextLabel)
{
- TextLabel->SetPosition(20, 64, 340, 42);
+ TextLabel->SetPosition(35, 64, 325, 42);
TextLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
TextLabel->SetVisible(true);
}
if (TextLabel_Y)
{
- TextLabel_Y->SetPosition(22, 66, 340, 42);
+ TextLabel_Y->SetPosition(35, 66, 325, 42);
TextLabel_Y->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
TextLabel_Y->SetVisible(true);
}
}
if (TextLabel)
{
- TextLabel->SetPosition(0, 64, 360, 42);
+ TextLabel->SetPosition(35, 64, 325, 42);
TextLabel->SetText(currentStatusText.c_str());
TextLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
TextLabel->SetVisible(true);
}
if (TextLabel_Y)
{
- TextLabel_Y->SetPosition(2, 66, 360, 42);
+ TextLabel_Y->SetPosition(37, 66, 325, 42);
TextLabel_Y->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
TextLabel_Y->SetText(currentStatusText.c_str());
TextLabel_Y->SetVisible(true);
void ThunderBirdDialogueView::UpdateDialogueText(const char *text)
{
if(!TextLabel || !TextLabel_Y) return;
+
+ // 先停止滚动,确保同步
+ TextLabel->SetAnimState(Animator::STOP);
+ TextLabel_Y->SetAnimState(Animator::STOP);
+
+ // 设置文本
TextLabel->SetText(text);
- TextLabel_Y->SetText(text);
+ TextLabel_Y->SetText(text);
+
+ // 同时开始滚动,确保同步
+ TextLabel->SetAnimState(Animator::START);
+ TextLabel_Y->SetAnimState(Animator::START);
}
void ThunderBirdDialogueView::AudioPlaybackEnd()
qrcode_ = new UIQrcode();
if (qrcode_)
{
- qrcode_->SetPosition(133, 169, 104, 104);
+ qrcode_->SetPosition(119, 157, 111, 111);
qrcode_->SetQrcodeInfo(ThunderBirdModel::GetInstance()->GetQrcodeContent().c_str());
qrcode_->SetStyle(STYLE_PADDING_LEFT, 4);
qrcode_->SetStyle(STYLE_PADDING_RIGHT, 4);
{
if (TextLabel)
{
- TextLabel->SetPosition(0, 64, 360, 42);
+ TextLabel->SetPosition(35, 64, 325, 42);
TextLabel->SetText("我可以和你聊天,哄你睡觉");
TextLabel->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE);
TextLabel->SetRollSpeed(35);
}
if (TextLabel_Y)
{
- TextLabel_Y->SetPosition(2, 66, 360, 42);
+ TextLabel_Y->SetPosition(37, 66, 325, 42);
TextLabel_Y->SetText("我可以和你聊天,哄你睡觉");
TextLabel_Y->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE);
TextLabel_Y->SetRollSpeed(35);
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "start qrcode path:%s", ThunderBirdModel::GetInstance()->GetQrcodeContent().c_str());
// 重新设置二维码的尺寸和样式,防止变小
- qrcode_->SetPosition(133, 169, 104, 104);
- qrcode_->SetStyle(STYLE_PADDING_LEFT, 4);
- qrcode_->SetStyle(STYLE_PADDING_RIGHT, 4);
- qrcode_->SetStyle(STYLE_PADDING_TOP, 4);
- qrcode_->SetStyle(STYLE_PADDING_BOTTOM, 4);
+ qrcode_->SetPosition(119, 157, 111, 111);
qrcode_->SetQrcodeInfo(ThunderBirdModel::GetInstance()->GetQrcodeContent().c_str());
- //打印
+
+ // 强制重新设置尺寸,防止SetQrcodeInfo后尺寸被改变
qrcode_->Invalidate();//刷新
}
}
ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON);
if (TextLabel)
{
- TextLabel->SetPosition(0, 64, 360, 42);
+ TextLabel->SetPosition(35, 64, 325, 42);
TextLabel->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE);
TextLabel->SetRollSpeed(55);
TextLabel->SetVisible(true);
}
if (TextLabel_Y)
{
- TextLabel_Y->SetPosition(2, 66, 360, 42);
+ TextLabel_Y->SetPosition(37, 66, 325, 42);
TextLabel_Y->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE);
TextLabel_Y->SetStyle(STYLE_TEXT_COLOR, 0xff000000);
TextLabel_Y->SetRollSpeed(55);
void ThunderBirdLullabyView::UpdateLullabyText(const char *text)
{
- TextLabel->SetText(text);
- TextLabel_Y->SetText(text);
+ // 先停止滚动,确保同步
+ TextLabel->SetAnimState(Animator::STOP);
+ TextLabel_Y->SetAnimState(Animator::STOP);
+
+ // 设置文本
+ TextLabel->SetText(text);
+ TextLabel_Y->SetText(text);
+
+ // 同时开始滚动,确保同步
+ TextLabel->SetAnimState(Animator::START);
+ TextLabel_Y->SetAnimState(Animator::START);
}
}
static constexpr int16_t JPEG_HEIGHT_DIVISOR = 2;
static const int64_t COLOR_SIGNAL_ON = 0xffffffff;
- static const int64_t COLOR_SIGNAL_OFF = 0xff383838;
+ static const int64_t COLOR_SIGNAL_OFF = 0xff909090;
static MediaVideoPlay *g_videoPlay = nullptr;
static bool g_lastPlayed = false;
currentSubView == ThunderBirdAdjustView::THUNDERBIRD_ADJUSTVIEW_WARNING) {
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "警告界面超时,检查是否为解绑警告");
// 检查是否为解绑警告,如果是则恢复出厂设置
- if (bind_status == true) {
+ if (bind_status == false) {
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "解绑警告界面超时,恢复出厂设置");
restore_factory_settings();
} else {
//增加设备解绑提示
int currentView = ThunderBirdMainView::GetInstance()->GetCurrentView(); //获取当前视图
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleBindAndUnbind: 设备已解绑,显示解绑警告");
+ bind_status = false;//解绑标志值位,用于界面跳转真正解绑放到出厂设置里面
ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_ADJUSTVIEW, ThunderBirdAdjustView::THUNDERBIRD_ADJUSTVIEW_WARNING);
if(ThunderBirdAdjustView::GetInstance())
{
}
}
+ // 录音结束处理函数
+ void ThunderBirdModel::HandleAudioRecordingEnd()
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleAudioRecordingEnd: 录音结束,跳转到播放界面");
+
+ // 获取当前视图状态
+ ThunderBirdMainView *view = ThunderBirdMainView::GetInstance();
+ if (view) {
+ int16_t currentView = view->GetCurrentView();
+ int16_t currentSubView = view->GetCurrentSubView();
+
+ // 如果当前在对话界面,且不是在状态显示界面(说明是正常录音结束,不是退出对话)
+ if (currentView == THUNDERBIRD_DIALOGUEVIEW &&
+ currentSubView != ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "录音结束,跳转到播放界面");
+ view->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_SPEAKING);
+
+ // 停止聆听超时定时器
+ StopCountUpTimer();
+
+ // 清空音频文本队列
+ ClearAudioTextQueue();
+ } else {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "录音结束,但当前在状态显示界面,跳过界面跳转(可能是退出对话模式)");
+ }
+ }
+ }
+
// 将英文表情映射到英文文件名
std::string ThunderBirdModel::MapEmotionToFileName(const char* emotion)
{
// 处理对话功能
HandleDialogueFunction(currentView, currentSubView);
}
+ else
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HandleFuncKey: KEY_TYPE_FUNC press, but not in dialogue mode");
+ }
}
return true;
*/
void ThunderBirdPresenter::HandleDialogueFunction(int16_t currentView, int16_t currentSubView)
{
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HandleDialogueFunction: currentView=%d, currentSubView=%d", currentView, currentSubView);
+
//bool flag = ThunderBirdModel::GetInstance()->Get_is_all_services_ready();
// if(flag == false)
// {
DialogueingFlag = true;
}
else*/if (currentView == THUNDERBIRD_DIALOGUEVIEW && currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_LISTENING ) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "停止录音,跳转到思考状态");
// 停止录音并发送
// 停止聆听超时定时器
ThunderBirdModel::GetInstance()->StopCountUpTimer();
//清空音频文本队列
ThunderBirdModel::GetInstance()->ClearAudioTextQueue();
} else {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "开始录音,跳转到聆听状态");
// 开始录音
ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_LISTENING);
ThunderBirdDialogueView::GetInstance()->UpdateDialogueText("超认真聆听中");
int16_t currentView = ThunderBirdMainView::GetInstance()->GetCurrentView();
int16_t currentSubView = ThunderBirdMainView::GetInstance()->GetCurrentSubView();
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HandleFuncKeyLongPress: currentView=%d, currentSubView=%d, isDialogueing=%d",
+ currentView, currentSubView, isDialogueing);
+
if(currentView == THUNDERBIRD_DIALOGUEVIEW && currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW)
{
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "进入对话模式");
ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_LISTENING);
isDialogueing = true;
// 进入对话模式时记录当前表情
//ThunderBirdDialogueView::GetInstance()->UpdateDialogueText("点击开始对话");
//DialogueingFlag = true;
//ln_ws_audio_init();//功耗优化
- do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_INIT, NULL, 0);
ln_ws_start_audio_chat(LN_AUDIO_CHAT_VOICE_CHAT_REQUEST);//开始对话
+
+ do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_INIT, NULL, 0);
}
else if(currentView == THUNDERBIRD_DIALOGUEVIEW)
{
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "退出对话模式,当前子状态: %d", currentSubView);
+ // 先停止定时器,避免在退出过程中继续触发
+ if(currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_LISTENING)
+ {
+ ThunderBirdModel::GetInstance()->StopCountUpTimer();
+ }
+
// 停止实际的音频播放
// ai_media_play_stop();
// WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThunderBirdDialogueView::AudioPlaybackEnd: Stopped audio playback");
isDialogueing = false;
// DialogueingFlag = false;
ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW);
- if(currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_LISTENING)
- {
- ThunderBirdModel::GetInstance()->StopCountUpTimer();
- }
ThunderBirdModel::GetInstance()->OnExitDialogueMode();
}
if (TextLabel)
{
// 文本位置:图标右侧,紧挨着
- TextLabel->SetPosition(96, 64, 300, 42);
- TextLabel->SetText("11点了该睡觉了");
+ TextLabel->SetPosition(35, 64, 325, 42);
+ TextLabel->SetText("你有一条提醒");
TextLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); // 左对齐,因为已经整体居中了
TextLabel->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE);
TextLabel->SetRollSpeed(35);
if (TextLabel_Y)
{
// 黑色文本:位置比白色文本偏移2像素
- TextLabel_Y->SetPosition(98, 66, 300, 42);
- TextLabel_Y->SetText("11点了该睡觉了");
+ TextLabel_Y->SetPosition(37, 66, 325, 42);
+ TextLabel_Y->SetText("你有一条提醒");
TextLabel_Y->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
TextLabel_Y->SetStyle(STYLE_TEXT_COLOR, 0xff000000);
TextLabel_Y->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE);
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Updated task reminder text with content only: %s", content);
} else {
// 都没有,使用默认文本
- TextLabel->SetText("11点了该睡觉了");
- TextLabel_Y->SetText("11点了该睡觉了");
+ TextLabel->SetText("你有一条提醒");
+ TextLabel_Y->SetText("你有一条提醒");
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Updated task reminder text with default text");
}
}
static void HandDownloadProgressNotify(Request *request);
static void HandAudioPlaybackStartNotify(Request *request);
static void HandAudioPlaybackEndNotify(Request *request);
+static void HandAudioRecordingEndNotify(Request *request);
static void HandNpcEmotionChangeNotify(Request *request);
static void HandTimelineStatusChangeNotify(Request *request);
// 消息处理程序项数组(每个消息类型对应一个处理函数,函数名以 Handle 开头)
{HAND_DOWNLOAD_PROGRESS_NOTIFY,HandDownloadProgressNotify},
{HAND_AUDIO_PLAYBACK_START_NOTIFY,HandAudioPlaybackStartNotify},
{HAND_AUDIO_PLAYBACK_END_NOTIFY,HandAudioPlaybackEndNotify},
+ {HAND_AUDIO_RECORDING_END_NOTIFY,HandAudioRecordingEndNotify},
{HAND_NPC_EMOTION_CHANGE_NOTIFY,HandNpcEmotionChangeNotify},
{HAND_TIMELINE_STATUS_CHANGE_NOTIFY,HandTimelineStatusChangeNotify},
};
GraphicService::GetInstance()->PostGraphicEvent(
std::bind(&OHOS::ThunderBirdModel::HandleAudioPlaybackEnd,OHOS::ThunderBirdModel::GetInstance()));
}
+
+// 录音结束通知
+void HandAudioRecordingEndNotify(Request *request)
+{
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_UI_SERVICE, "HandAudioRecordingEndNotify msg_id = %d", request->msgId);
+ GraphicService::GetInstance()->PostGraphicEvent(
+ std::bind(&OHOS::ThunderBirdModel::HandleAudioRecordingEnd,OHOS::ThunderBirdModel::GetInstance()));
+}
// 通知npc表情变化
void HandNpcEmotionChangeNotify(Request *request)
{
#include "power_display_service.h"\r
#endif\r
\r
+#if defined(CUSTOM_UTILS) && defined(BOARD_LEINIAO)\r
+#include "custom_utils.h"\r
+#endif\r
+\r
#include "soc_lcd_api.h"\r
\r
// int32_t user_get_random_bytes(uint32_t size, uint8_t *randnum)\r
return;\r
}\r
\r
+#if defined(CUSTOM_UTILS) && defined(BOARD_LEINIAO)\r
+ PRINT("Turning on LCD backlight...\n");\r
+ uapi_lcd_backlight_on();\r
+ PRINT("LCD backlight turned on (CUSTOM_UTILS + BOARD_LEINIAO)\n");\r
+#endif\r
+\r
#ifdef ENABLE_UIKIT\r
InitGraphicService();\r
#endif\r
# 'TPTYPE_FT6X46',
'CFG_FLASH_SIZE=16',
'CONFIG_NORFLASH_SIZE=16',
+ 'CUSTOM_UTILS',
'LEINIAO',
- 'SINGLE_USER_PARTITION'
+ 'SINGLE_USER_PARTITION',
+ # 添加显示支持
+ 'LCD_JD9885',
],
'ram_component': ["at_cmd"]
},
# 'TPTYPE_FT6X46',
'CFG_FLASH_SIZE=16',
'CONFIG_NORFLASH_SIZE=16',
+ 'CUSTOM_UTILS',
'LEINIAO',
- 'SINGLE_USER_PARTITION'
+ 'SINGLE_USER_PARTITION',
+ # 添加显示支持
+ 'LCD_JD9885',
],
'ram_component': ["at_cmd"]
},
{ S_AGPIO_L20, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_HIGH, 0, NULL },
#endif
- // { S_AGPIO_L16, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_HIGH, 0, NULL },
+ //{ S_AGPIO_L16, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_HIGH, 0, NULL },
//默认关闭马达
{ S_AGPIO_L32, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL },
{ S_AGPIO_R0, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL },
push_audio_playback_start_notification();
break;
}
+ case WS_CMD_AUDIO_RECORDING_END:
+ {
+ push_audio_recording_end_notification();
+ break;
+ }
default:
{
printf("[WS] Unknown command=%s\n", cmd_str ? cmd_str : "");
SendMsgToUIService(HAND_DOWNLOAD_PROGRESS_NOTIFY, 0, &progress, sizeof(progress));
}
-//通知音频播放结束了
//通知音频播放开始了
void push_audio_playback_start_notification(void)
{
SendMsgToUIService(HAND_AUDIO_PLAYBACK_START_NOTIFY, 0, NULL, 0);
}
+//通知音频播放结束了
void push_audio_playback_end_notification(void)
{
SendMsgToUIService(HAND_AUDIO_PLAYBACK_END_NOTIFY, 0, NULL, 0);
}
+//通知录音结束
+void push_audio_recording_end_notification(void)
+{
+ SendMsgToUIService(HAND_AUDIO_RECORDING_END_NOTIFY, 0, NULL, 0);
+}
//通知npc表情变化
void push_npc_emotion_change_notification(const char *emotion)
{
//通知音频播放结束了
void push_audio_playback_start_notification(void);
void push_audio_playback_end_notification(void);
+//通知录音结束
+void push_audio_recording_end_notification(void);
//通知npc表情变化
void push_npc_emotion_change_notification(const char *emotion);
//通知时间线状态变化