From f6389b0dec4c38927e90fd36d7495caf84b03f3c Mon Sep 17 00:00:00 2001 From: xue <2144439972@qq.com> Date: Mon, 27 Oct 2025 15:40:00 +0800 Subject: [PATCH] =?utf8?q?=E9=87=8D=E6=96=B0=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../brandy/brandy_recovery/recovery_display.c | 19 +++++++++-- .../nativeui/include/uiservice/ui_service.h | 1 + .../nativeapp/nativeui/ota/src/OtaModel.cpp | 3 ++ .../thunderbird/include/ThunderBirdModel.h | 3 ++ .../thunderbird/src/ThunderBirdAdjustView.cpp | 16 ++++----- .../src/ThunderBirdDialogueView.cpp | 20 ++++++++--- .../thunderbird/src/ThunderBirdGuideView.cpp | 15 ++++----- .../src/ThunderBirdLullabyView.cpp | 17 +++++++--- .../thunderbird/src/ThunderBirdMainView.cpp | 2 +- .../thunderbird/src/ThunderBirdModel.cpp | 31 +++++++++++++++++- .../thunderbird/src/ThunderBirdPresenter.cpp | 26 ++++++++++++--- .../src/ThunderBirdReminderView.cpp | 12 +++---- .../nativeui/uiservice/src/ui_service.cpp | 10 ++++++ .../wearable/ohos_startup/ohosfwk_startup.c | 10 ++++++ .../config/target_config/brandy/config.py | 10 ++++-- .../brandy_evb/board_config/board_leiniao.h | 2 +- .../fs/user/system/SystemUpdateing.bin | Bin 86424 -> 397448 bytes code/sdk/zhihui/leiniao/imsl_ln/ln_api.c | 5 +++ .../leiniao/ln_api_cpp/ln_api_interface.cpp | 7 +++- .../leiniao/ln_api_cpp/ln_api_interface.h | 2 ++ 20 files changed, 166 insertions(+), 45 deletions(-) diff --git a/code/sdk/application/brandy/brandy_recovery/recovery_display.c b/code/sdk/application/brandy/brandy_recovery/recovery_display.c index 1ea9c3eb7..3777ef1c7 100644 --- a/code/sdk/application/brandy/brandy_recovery/recovery_display.c +++ b/code/sdk/application/brandy/brandy_recovery/recovery_display.c @@ -16,6 +16,7 @@ #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 @@ -27,6 +28,19 @@ #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, @@ -118,11 +132,11 @@ void recovery_display_sample(void) 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 实现从文件系统读图片 @@ -187,4 +201,5 @@ void recovery_display_init(void) uapi_lcd_deinit(); return; } + recovery_lcd_backlight_on(); // 开启背光 } diff --git a/code/sdk/application/wearable/ln/nativeapp/nativeui/include/uiservice/ui_service.h b/code/sdk/application/wearable/ln/nativeapp/nativeui/include/uiservice/ui_service.h index a44a75dc8..8966aefac 100644 --- a/code/sdk/application/wearable/ln/nativeapp/nativeui/include/uiservice/ui_service.h +++ b/code/sdk/application/wearable/ln/nativeapp/nativeui/include/uiservice/ui_service.h @@ -67,6 +67,7 @@ typedef enum { 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, diff --git a/code/sdk/application/wearable/ln/nativeapp/nativeui/ota/src/OtaModel.cpp b/code/sdk/application/wearable/ln/nativeapp/nativeui/ota/src/OtaModel.cpp index 8c1dad34a..0fff6491c 100644 --- a/code/sdk/application/wearable/ln/nativeapp/nativeui/ota/src/OtaModel.cpp +++ b/code/sdk/application/wearable/ln/nativeapp/nativeui/ota/src/OtaModel.cpp @@ -260,6 +260,7 @@ namespace OHOS 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); @@ -411,6 +412,7 @@ namespace OHOS { if(OtaDownloadView::GetInstance()) { + uapi_setScreenDuration(30000); // 重新设置30秒自动息屏 OtaView::GetInstance()->ChangeView(OtaView::OTA_VIEW_DOWNLOAD, OtaView::OTA_VIEW_UPDATE_SUCCESS); OtaSuccessView::GetInstance()->UpdateDownloadSuccess("下载成功"); } @@ -430,6 +432,7 @@ namespace OHOS { if(OtaDownloadView::GetInstance()) { + uapi_setScreenDuration(30000); // 重新设置30秒自动息屏 OtaView::GetInstance()->ChangeView(OtaView::OTA_VIEW_DOWNLOAD, OtaView::OTA_VIEW_UPDATE_SUCCESS); OtaSuccessView::GetInstance()->UpdateDownloadSuccess("下载失败"); } diff --git a/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/include/ThunderBirdModel.h b/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/include/ThunderBirdModel.h index f421625b5..30e1929a0 100644 --- a/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/include/ThunderBirdModel.h +++ b/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/include/ThunderBirdModel.h @@ -229,6 +229,9 @@ namespace OHOS // NPC表情变化处理函数 void HandleNpcEmotionChange(const char* emotion); + // 录音结束处理函数 + void HandleAudioRecordingEnd(); + // 将英文表情映射到英文文件名 std::string MapEmotionToFileName(const char* emotion); diff --git a/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdAdjustView.cpp b/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdAdjustView.cpp index 421442e92..0e64ad40a 100644 --- a/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdAdjustView.cpp +++ b/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdAdjustView.cpp @@ -201,7 +201,7 @@ namespace OHOS } if (RemindLabel) { - RemindLabel->SetPosition(132, 284, 96, 28); + RemindLabel->SetPosition(136, 275, 96, 25); RemindLabel->SetText("按 退出"); RemindLabel->SetVisible(true); } @@ -213,16 +213,16 @@ namespace OHOS } 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: diff --git a/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdDialogueView.cpp b/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdDialogueView.cpp index ccf2a1c24..d7a1ddf9f 100644 --- a/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdDialogueView.cpp +++ b/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdDialogueView.cpp @@ -166,13 +166,13 @@ namespace OHOS 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); } @@ -226,14 +226,14 @@ namespace OHOS } 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); @@ -247,8 +247,18 @@ namespace OHOS 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() diff --git a/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdGuideView.cpp b/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdGuideView.cpp index 91ab067c1..885dc07ae 100644 --- a/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdGuideView.cpp +++ b/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdGuideView.cpp @@ -78,7 +78,7 @@ namespace OHOS 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); @@ -187,7 +187,7 @@ namespace OHOS { 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); @@ -195,7 +195,7 @@ namespace OHOS } 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); @@ -260,14 +260,11 @@ namespace OHOS 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();//刷新 } } diff --git a/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdLullabyView.cpp b/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdLullabyView.cpp index e73f2d21d..3031a7152 100644 --- a/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdLullabyView.cpp +++ b/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdLullabyView.cpp @@ -361,14 +361,14 @@ namespace OHOS 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); @@ -434,8 +434,17 @@ namespace OHOS 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); } } diff --git a/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdMainView.cpp b/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdMainView.cpp index 868eda3a8..132fe03cd 100644 --- a/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdMainView.cpp +++ b/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdMainView.cpp @@ -40,7 +40,7 @@ namespace OHOS 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; diff --git a/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp b/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp index ac9dd9646..407378021 100644 --- a/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp +++ b/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp @@ -1511,7 +1511,7 @@ 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 { @@ -2239,6 +2239,7 @@ //增加设备解绑提示 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()) { @@ -2334,6 +2335,34 @@ } } + // 录音结束处理函数 + 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) { diff --git a/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdPresenter.cpp b/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdPresenter.cpp index 43044cf1d..89c9a44ec 100644 --- a/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdPresenter.cpp +++ b/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdPresenter.cpp @@ -290,6 +290,10 @@ namespace OHOS // 处理对话功能 HandleDialogueFunction(currentView, currentSubView); } + else + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HandleFuncKey: KEY_TYPE_FUNC press, but not in dialogue mode"); + } } return true; @@ -362,6 +366,8 @@ namespace OHOS */ 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) // { @@ -375,6 +381,7 @@ namespace OHOS DialogueingFlag = true; } else*/if (currentView == THUNDERBIRD_DIALOGUEVIEW && currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_LISTENING ) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "停止录音,跳转到思考状态"); // 停止录音并发送 // 停止聆听超时定时器 ThunderBirdModel::GetInstance()->StopCountUpTimer(); @@ -383,6 +390,7 @@ namespace OHOS //清空音频文本队列 ThunderBirdModel::GetInstance()->ClearAudioTextQueue(); } else { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "开始录音,跳转到聆听状态"); // 开始录音 ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_LISTENING); ThunderBirdDialogueView::GetInstance()->UpdateDialogueText("超认真聆听中"); @@ -680,8 +688,12 @@ namespace OHOS 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; // 进入对话模式时记录当前表情 @@ -689,12 +701,20 @@ namespace OHOS //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"); @@ -711,10 +731,6 @@ namespace OHOS 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(); } diff --git a/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdReminderView.cpp b/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdReminderView.cpp index 8ff2af773..f3d2e3f78 100644 --- a/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdReminderView.cpp +++ b/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdReminderView.cpp @@ -161,8 +161,8 @@ namespace OHOS 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); @@ -172,8 +172,8 @@ namespace OHOS 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); @@ -478,8 +478,8 @@ namespace OHOS 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"); } } diff --git a/code/sdk/application/wearable/ln/nativeapp/nativeui/uiservice/src/ui_service.cpp b/code/sdk/application/wearable/ln/nativeapp/nativeui/uiservice/src/ui_service.cpp index d8e4c8020..4ceb644fd 100644 --- a/code/sdk/application/wearable/ln/nativeapp/nativeui/uiservice/src/ui_service.cpp +++ b/code/sdk/application/wearable/ln/nativeapp/nativeui/uiservice/src/ui_service.cpp @@ -103,6 +103,7 @@ static void HandDownloadFailNotify(Request *request); 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 开头) @@ -124,6 +125,7 @@ MsgHandlerEntry msgHandlers[] = { {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}, }; @@ -658,6 +660,14 @@ void HandAudioPlaybackEndNotify(Request *request) 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) { diff --git a/code/sdk/application/wearable/ohos_startup/ohosfwk_startup.c b/code/sdk/application/wearable/ohos_startup/ohosfwk_startup.c index cc0800f09..5a70c16d6 100644 --- a/code/sdk/application/wearable/ohos_startup/ohosfwk_startup.c +++ b/code/sdk/application/wearable/ohos_startup/ohosfwk_startup.c @@ -16,6 +16,10 @@ #include "power_display_service.h" #endif +#if defined(CUSTOM_UTILS) && defined(BOARD_LEINIAO) +#include "custom_utils.h" +#endif + #include "soc_lcd_api.h" // int32_t user_get_random_bytes(uint32_t size, uint8_t *randnum) @@ -45,6 +49,12 @@ void ohos_show_bootup_logo(void) return; } +#if defined(CUSTOM_UTILS) && defined(BOARD_LEINIAO) + PRINT("Turning on LCD backlight...\n"); + uapi_lcd_backlight_on(); + PRINT("LCD backlight turned on (CUSTOM_UTILS + BOARD_LEINIAO)\n"); +#endif + #ifdef ENABLE_UIKIT InitGraphicService(); #endif diff --git a/code/sdk/build/config/target_config/brandy/config.py b/code/sdk/build/config/target_config/brandy/config.py index 421dd6a81..28c9282bf 100644 --- a/code/sdk/build/config/target_config/brandy/config.py +++ b/code/sdk/build/config/target_config/brandy/config.py @@ -1374,8 +1374,11 @@ target = { # '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"] }, @@ -1546,8 +1549,11 @@ target = { # '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"] }, diff --git a/code/sdk/drivers/boards/brandy_evb/board_config/board_leiniao.h b/code/sdk/drivers/boards/brandy_evb/board_config/board_leiniao.h index 07a30ca66..7ab99de56 100644 --- a/code/sdk/drivers/boards/brandy_evb/board_config/board_leiniao.h +++ b/code/sdk/drivers/boards/brandy_evb/board_config/board_leiniao.h @@ -288,7 +288,7 @@ const hal_gpio_config_t g_gpio_function_config[PIN_MAX_NUMBER] = { { 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 }, diff --git a/code/sdk/files/leiniao/fs/user/system/SystemUpdateing.bin b/code/sdk/files/leiniao/fs/user/system/SystemUpdateing.bin index 8bd87fab4cfa82398fcb364548f48e752fc754cd..f9a331c768628ff08bb143bdec9923211f08a677 100644 GIT binary patch literal 397448 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 NsylD1mp~m){(rI^Dt!O| literal 86424 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 diff --git a/code/sdk/zhihui/leiniao/imsl_ln/ln_api.c b/code/sdk/zhihui/leiniao/imsl_ln/ln_api.c index 1a56180d8..094d34d70 100644 --- a/code/sdk/zhihui/leiniao/imsl_ln/ln_api.c +++ b/code/sdk/zhihui/leiniao/imsl_ln/ln_api.c @@ -991,6 +991,11 @@ void ln_ws_process_message(const ws_data_msg_t *data_msg, ws_command_t type) 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 : ""); diff --git a/code/sdk/zhihui/leiniao/ln_api_cpp/ln_api_interface.cpp b/code/sdk/zhihui/leiniao/ln_api_cpp/ln_api_interface.cpp index ec570196d..d9a104e1c 100644 --- a/code/sdk/zhihui/leiniao/ln_api_cpp/ln_api_interface.cpp +++ b/code/sdk/zhihui/leiniao/ln_api_cpp/ln_api_interface.cpp @@ -254,17 +254,22 @@ void push_download_progress_notification(int progress) 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) { diff --git a/code/sdk/zhihui/leiniao/ln_api_cpp/ln_api_interface.h b/code/sdk/zhihui/leiniao/ln_api_cpp/ln_api_interface.h index 02df5a0b6..ea27b270c 100644 --- a/code/sdk/zhihui/leiniao/ln_api_cpp/ln_api_interface.h +++ b/code/sdk/zhihui/leiniao/ln_api_cpp/ln_api_interface.h @@ -101,6 +101,8 @@ void push_download_progress_notification(int progress); //通知音频播放结束了 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); //通知时间线状态变化 -- 2.17.1