From c22a6f323daad5a5070cc2d565e0173053fccb44 Mon Sep 17 00:00:00 2001 From: penglei <1624952103@qq.com> Date: Sat, 13 Sep 2025 16:52:36 +0800 Subject: [PATCH] =?utf8?q?=E4=BC=98=E5=8C=96gps=E5=BC=80=E5=85=B3=E9=80=BB?= =?utf8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../sdk/zhihui/UI/producttest/src/testGPS.cpp | 14 + .../UI/producttest/src/testPresenter.cpp | 1138 ++++++++--------- .../gnss/sample/pgnss_sample/pgnss_sample.c | 87 +- 3 files changed, 659 insertions(+), 580 deletions(-) diff --git a/code/sdk/zhihui/UI/producttest/src/testGPS.cpp b/code/sdk/zhihui/UI/producttest/src/testGPS.cpp index 692d047ab..98dc41ef5 100644 --- a/code/sdk/zhihui/UI/producttest/src/testGPS.cpp +++ b/code/sdk/zhihui/UI/producttest/src/testGPS.cpp @@ -179,11 +179,25 @@ namespace OHOS if (gpsIsOn) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GPS Toggle: Turning ON (Button: Green '关')"); + + // 检查GPS是否已经在运行 + if (getPGnssServerStat() == 1) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GPS Toggle: GPS already running, skipping start"); + return; + } + gnss_start(); } else { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GPS Toggle: Turning OFF (Button: Blue '开')"); + + // 检查GPS是否已经停止 + if (getPGnssServerStat() == 0) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GPS Toggle: GPS already stopped, skipping stop"); + return; + } + gnss_stop(); } } diff --git a/code/sdk/zhihui/UI/producttest/src/testPresenter.cpp b/code/sdk/zhihui/UI/producttest/src/testPresenter.cpp index 7653a6240..ffed16d39 100644 --- a/code/sdk/zhihui/UI/producttest/src/testPresenter.cpp +++ b/code/sdk/zhihui/UI/producttest/src/testPresenter.cpp @@ -1,570 +1,570 @@ -#include "AppViewIDs.h" -#include "components/ui_label_ext.h" -#ifdef FD230 - #include"ui_resource_string.h" -#endif - -#include "NativeRegisterManager.h" -#include "NativeAbility.h" -#include "graphic_math.h" -#include "string.h" -#include "producttest/include/testPresenter.h" -// #include "font/font_global_manager.h" -// #include "font/ui_font.h" -#ifdef FD230 - #include "languagecode/LanguageInit.h" -#endif -#include "../../../../../../zhihui/utils/custom_utils.h" -#include "power_display_service.h" -#include "components/ui_slider.h" - -#include "audio_capture_wrapper.h" -#ifdef SUPPORT_CYWEE_SERVICE -#include "cywee_service.h" -#endif - -#ifdef FD230 - #include "factorytest_protocol.h" -#endif - - - -#include "custom_runtime.h" - -#if defined(SUPPORT_GNSS) -#include "gnss_ctl.h" -#endif - -#ifdef __cplusplus -#if __cplusplus -extern "C" -{ -#endif -#endif -#include "pm_definition.h" -#include "pm_veto.h" -#include "pm.h" -#ifdef __cplusplus -#if __cplusplus -} -#endif -#endif - -namespace OHOS -{ - REGIST_SLICE(VIEW_TEST, testView, testPresenter); - - - static char* view_id_str[]= - { - "TP_1", "TP_2", "TP_3", "TP_4", - "TP_5", "TP_6", "TP_7", "TP_8", - "TP_9","TP_10", "TP_11", "TP_12", - "TP_13","TP_14", "TP_15", "TP_16", - }; - - - // 2.ViewMapper[] 是一个静态的视图映射数组,将视图ID与MainStopWatchView类中的特定成员函数指针进行了绑定。 - extern test_ext Test_ViewMapper_t[]; - // {FACTORYRESETVIEW,"FactoryResetButton",true}, - // {SYSTEMLUPGRADE,"systemupgread",true}, - // {TEST,"testButton",true}}; - - // {ABOUTTHEWATCHVIEW, &SystemView::ChangeSystemAboutView}, - // {SUPERVISEVIEW, &SystemView::ChangeSystemSuperviseView}, - // {SYSTEMLANGUAGEVIEW, &SystemView::ChangeSystemLanguageView}, - - // 当前Presenter属性实例化的内存指针 - static testPresenter *g_pSystemPresenter = nullptr; - - testPresenter::testPresenter() - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "testPresenter::testPresenter"); - g_pSystemPresenter = this; - //systemModel = testModel::GetInstance(); - } - - testPresenter::~testPresenter() - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "testPresenter::~testPresenter"); - g_pSystemPresenter = nullptr; - } - - testPresenter *testPresenter::GetInstance() - { - - return g_pSystemPresenter; - } - - void testPresenter::OnStart() - { - } - - bool testPresenter::OnPress(UIView &view, const PressEvent &event) - { - return true; - } - - bool testPresenter::OnDrag(UIView &view, const DragEvent &event) - { - // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemPresenter::"); - if(strcmp(view.GetViewId(),"BrightnessControl") == 0 || strcmp(view.GetViewId(),"Brightnesview") == 0 ) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "xxxxxxxxxxxxx::"); - uint8_t value= testLUMView::GetInstance()->get_slider_value(); - - const power_display_svr_api_t *display_api = power_display_svr_get_api(); - - if (display_api->set_brightness(value) != ERRCODE_SUCC) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ChangeBrightness: set_brightness fail!"); - return false; - } - - } - - - if(strcmp(view.GetViewId(),"TP_test") == 0) - { - testTPView::GetInstance()->ChangeViewcolor(event.GetLastPoint().x,event.GetLastPoint().y); - - } - return true; - } - - bool testPresenter::OnDragEnd(UIView &view, const DragEvent &event) - { - testView *p_SystemView = testView::GetInstance(); - - if(strcmp(view.GetViewId(),"TP_test") == 0 || strcmp(view.GetViewId(),"BrightnessControl") == 0) - { - return true; - } - - // 更严格的左滑退出限制条件 - if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT) - { - // 获取拖拽的起始点和结束点 - Point startPoint = event.GetStartPoint(); - Point endPoint = event.GetLastPoint(); - - // 计算拖拽距离和速度 - int dragDistance = endPoint.x - startPoint.x; - int dragHeight = abs(endPoint.y - startPoint.y); - - // 严格的退出条件: - // 1. 水平拖拽距离必须大于150像素 - // 2. 垂直偏移不能超过50像素(保证是水平滑动) - // 3. 起始点必须在屏幕左侧30%区域内 - // 4. 水平拖拽距离必须大于垂直偏移的3倍(确保是明确的水平滑动) - int screenWidth = Screen::GetInstance().GetWidth(); - - if (dragDistance > 150 && // 最小拖拽距离150像素 - dragHeight < 50 && // 垂直偏移不超过50像素 - startPoint.x < screenWidth * 0.3 && // 起始点在左侧30%区域 - dragDistance > dragHeight * 3) // 水平距离是垂直距离的3倍以上 - { - for (int i = 1; i < MAX_TESTVIEWID; i++) - { - if (p_SystemView->GetSystemScrollView(i)) - { - p_SystemView->ChangeView(i, TESTVIEW); - break; - } - } - return true; - } - } - return false; - } - - // 该点击回调主要用于在系统视图界面进行跳转视图 - bool testPresenter::OnClick(UIView &view, const ClickEvent &event) - { - // === VIEWID 点击追踪调试 === - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"=== ONCLICK VIEWID DEBUG ===\n"); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"按钮被点击,view.GetViewId() = %s\n", view.GetViewId()); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"view.GetViewId() 地址 = %p\n", view.GetViewId()); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"view.GetViewId() 长度 = %zu\n", strlen(view.GetViewId())); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"按钮类型 = %d\n", view.GetViewType()); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"按钮位置 = (%d, %d)\n", view.GetX(), view.GetY()); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"按钮大小 = %dx%d\n", view.GetWidth(), view.GetHeight()); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"=== ONCLICK VIEWID DEBUG END ===\n"); - - testView *p_SystemView = testView::GetInstance(); - int len=MAX_TESTVIEWID;//sizeof(Test_ViewMapper_t)/sizeof(Test_ViewMapper_t[0]); - //int len=5; - // 根据控件id查找是哪个控件触发了点击回调 - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OnClick %s",view.GetViewId()); - - if(strcmp(view.GetViewId(),"xxxx") == 0) - { - //testSPEAKView::GetInstance()->Changspeak(true); - testView::GetInstance()->ChangeView(SEChipTest,TESTVIEW); - return true; - } - - if(strcmp(view.GetViewId(),"oldtestexit") == 0) - { - //testSPEAKView::GetInstance()->Changspeak(true); - testView::GetInstance()->ChangeView(OLDTEST,TESTVIEW); - return true; - } - if(strcmp(view.GetViewId(),"shutdown") == 0) - { - // #ifdef FD230_650 - uapi_poweroff_device(); - // #endif - return true; - } - if(strcmp(view.GetViewId(),"reset") == 0) - { - // #ifdef FD230_650 - uapi_reboot_device(); - // #endif - - return true; - } - if(strcmp(view.GetViewId(),"deepsleep") == 0) - { - //TODO: close bt and cat1 , then deepsleep - #ifdef SUPPORT_CYWEE_SERVICE - do_cywee_service_check_msg(CYWEE_SERVICE_CMD_STOP_ACC,NULL); - #endif - stop_custom_ble_service(); - LOS_Msleep(50); - uapi_set4GCapability(false); - LOS_Msleep(50); - - uint8_t cnt = pm_veto_get_id_cnt(PM_ID_P_TEST); - if (cnt == 1) { - uapi_pm_remove_sleep_veto(PM_ID_P_TEST); - } else { - // WEARABLE_LOGE(WEARABLE_LOG_MODULE_MAIN_SERVICE,"CAT1 SERVICE MCU has got pm_id_cat1 vote\r\n"); - } - - - // mcu_pm_lcd_off(NULL,NULL); - - const power_display_svr_api_t * display_api = power_display_svr_get_api(); - if (display_api) - { - display_api->turn_off_screen(); - } - - return true; - } - - if(strcmp(view.GetViewId(),"FactoryReset") == 0) - { - //TODO: close bt and cat1 , then deepsleep - do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_TYPE_RESTORE_FACTORY_SETTING, NULL, 0); - return true; - } - - for(int i=0;iChangeView(TESTVIEW, Test_ViewMapper_t[i].viewId); - } - return true; - } - if(strcmp(view.GetViewId(),Test_ViewMapper_t[i].viewid_str_next) == 0) - { - if(Test_ViewMapper_t[i+1].enable_falg==true) { - testView::GetInstance()->ChangeView(Test_ViewMapper_t[i].viewId, Test_ViewMapper_t[i+1].viewId); - } - return true; - } - - } - - // 处理各测试界面的 成功/失败 按钮 - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"view.GetViewId() %s ",view.GetViewId()); - if (strncmp(view.GetViewId(), "TestOK", 6) == 0 || strncmp(view.GetViewId(), "TestNO", 6) == 0) - { - - std::string vid = view.GetViewId(); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"view.GetViewId() %s ",vid.c_str()); - - if(testModel::GetInstance()->SetResult(vid)) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"SetResult成功"); - - // 实时更新按钮颜色 - testView::GetInstance()->UpdateButtonColorByViewId(view.GetViewId()); - - return true; - } - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"SetResult失败"); - return false; - } - - - - if(strcmp(view.GetViewId(),"speak_play") == 0) - { - testSPEAKView::GetInstance()->Changspeak(true); - } - else if (strcmp(view.GetViewId(),"speak_puase") == 0) - { - testSPEAKView::GetInstance()->Changspeak(false); - } - - if(strcmp(view.GetViewId(),"MOTOR_play") == 0) - { - testMOTORView::GetInstance()->Changstatr(true); - } - - if(strcmp(view.GetViewId(),"testmicrohoneView") == 0) - { - testmicrohoneView::GetInstance()->buttoncallback(); - } - - if(strcmp(view.GetViewId(),"dial_112") == 0) - { - #ifdef SUPPORT_CAT1_SERVICE - testcat1View::GetInstance()->dial_112(true); - #endif - } - - if(strcmp(view.GetViewId(),"gray_card") == 0) - { - - testhrsenson1View::GetInstance()->gray_test(true); - } - - - if(strcmp(view.GetViewId(),"leeklight") == 0) - { - - testhrsenson1View::GetInstance()->leeklight_test(true); - } - - if(strcmp(view.GetViewId(),"discovery") == 0) - { - - testBTView::GetInstance()->BT_discovery_callback(); - } - if(strcmp(view.GetViewId(),"addvolume") == 0) - { - testmicrohoneView::GetInstance()->addvolumebuttoncallback(); - } - if(strcmp(view.GetViewId(),"start") == 0) - { - if(uapi_dev_runtime_get_cat1_powerstat()) - uapi_set4GCapability(false); - #ifdef SUPPORT_FACTORY_SERVICE - factorytest_start_aging_test(); - #endif - } - if(strcmp(view.GetViewId(),"stop") == 0) - { -#ifdef SUPPORT_FACTORY_SERVICE - factorytest_stop_aging_test(); -#endif - } - if(strcmp(view.GetViewId(),"exit") == 0) - { - for (int i = 1; i < MAX_TESTVIEWID; i++) - { - if (p_SystemView->GetSystemScrollView(i)) - { - p_SystemView->ChangeView(i, TESTVIEW); - break; - } - } - return true; - } - if(strcmp(view.GetViewId(),"deep") == 0) - { - #ifdef SUPPORT_CYWEE_SERVICE - do_cywee_service_check_msg(CYWEE_SERVICE_CMD_STOP_ACC,NULL); - #endif - stop_custom_ble_service(); - LOS_Msleep(50); - uapi_set4GCapability(false); - LOS_Msleep(50); - - uint8_t cnt = pm_veto_get_id_cnt(PM_ID_P_TEST); - if (cnt == 1) { - uapi_pm_remove_sleep_veto(PM_ID_P_TEST); - } else { - // WEARABLE_LOGE(WEARABLE_LOG_MODULE_MAIN_SERVICE,"CAT1 SERVICE MCU has got pm_id_cat1 vote\r\n"); - } - - - // mcu_pm_lcd_off(NULL,NULL); - - const power_display_svr_api_t * display_api = power_display_svr_get_api(); - if (display_api) - { - display_api->turn_off_screen(); - } - - return true; - } - #ifdef SUPPORT_A5133_SERVICE - if(strcmp(view.GetViewId(),"receive") == 0) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "strcmp(view.GetViewId()recevie"); - testA5133View::GetInstance()->a5133_receive_callback(); - } - - if(strcmp(view.GetViewId(),"transmit") == 0) - { - testA5133View::GetInstance()->a5133_receive_callback(); - } - if(strcmp(view.GetViewId(),"send_data_1") == 0) - { - - testA5133View::GetInstance()->a5133_receive_callback(); - } - if(strcmp(view.GetViewId(),"send_data_2") == 0) - { - - testA5133View::GetInstance()->a5133_receive_callback(); - } - - - - - #endif - - #if defined(SUPPORT_GNSS) - if (strcmp(view.GetViewId(), GPS_OPEN_CONFIRM_BUTTON) == 0) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GPS Toggle Button OnClick"); - - // 切换GPS开关状态 - testGPSView* gpsView = testGPSView::GetInstance(); - if (gpsView != nullptr) - { - gpsView->ToggleGPSState(); - } - } - #endif - return false; - } - - bool testPresenter::OnKeyAct(UIView &view, const KeyEvent &event) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AlarmPresenter::OnKeyAct"); - uint8_t keyID = event.GetKeyId(); - uint8_t keystate=event.GetState(); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, ":xxxxxxx:%d",keyID); - // 如果是power键就返回上一级 - if(testbuttonView::GetInstance()) - { - if (keyID == 41 ) - { - if(keystate) - testbuttonView::GetInstance()-> Changbutton(0,true); - else - testbuttonView::GetInstance()-> Changbutton(0,false); - - // uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId(); - // NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST); - } - if (keyID == 0) - { - if(keystate) - testbuttonView::GetInstance()-> Changbutton(1,true); - else - testbuttonView::GetInstance()-> Changbutton(1,false); - - // uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId(); - // NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST); - } - -#ifdef BOARD_U8 - if (keyID == 1) - { - - if(keystate) - testbuttonView::GetInstance()-> Changbutton(2,true); - else - testbuttonView::GetInstance()-> Changbutton(2,false); - - // uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId(); - // NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST); - } -#endif - - } - - return true; - } - - bool testPresenter::OnRotate(UIView &view, const RotateEvent &event) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "testPresenter::OnRotate %d",event.GetRotate()); - testbuttonView::GetInstance()->Changbutton(event.GetRotate()); - - testbuttonView::GetInstance()->Changbutton(true); - return true; - } - - bool testPresenter::OnRotateEnd(UIView &view, const RotateEvent &event) - { - UNUSED(view); - UNUSED(event); - testbuttonView::GetInstance()->Changbutton(false); - return true; - } - - // 该拖拽是用来处理系统视图(slice)的左滑退出事件和子视图的左滑退出到系统视图区分开 - - - /// @brief 简体中文单选按钮被选中 - /// @param void - /// @return true 表示选中 ,false 表示未选中 - - - /// @brief 英语单选按钮被选中 - /// @param void - /// @return true 表示选中 ,false 表示未选中 - - - /* -------------------------------------------------------------------------- */ - // 获取语言类 - //language *g_planguage = new language; - /* -------------------------------------------------------------------------- */ - // 用来监听语言切换 - -#ifdef __cplusplus -#if __cplusplus -extern "C" -{ -#endif /* __cplusplus */ -#endif /* __cplusplus */ - - void factorytest_enter_test_tp_view(void) - { - if(testView::GetInstance()) - testView::GetInstance()->ChangeView(TESTVIEW,TP); - else - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"xxxxxxxxxxxxxxxxxxxxx\r\n"); - } - - void factorytest_enter_test_lcd_view(void) - { - if( testView::GetInstance()) - testView::GetInstance()->ChangeView(TESTVIEW,LCD); - else - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"xxxxxxxxxxxxxxxxxxxxx\r\n"); - } - - void factorytest_enter_test_button_view(void) - { - testView::GetInstance()->ChangeView(TESTVIEW,BUTTON); - } - -#ifdef __cplusplus -#if __cplusplus -} -#endif /* __cplusplus */ -#endif /* __cplusplus */ +#include "AppViewIDs.h" +#include "components/ui_label_ext.h" +#ifdef FD230 + #include"ui_resource_string.h" +#endif + +#include "NativeRegisterManager.h" +#include "NativeAbility.h" +#include "graphic_math.h" +#include "string.h" +#include "producttest/include/testPresenter.h" +// #include "font/font_global_manager.h" +// #include "font/ui_font.h" +#ifdef FD230 + #include "languagecode/LanguageInit.h" +#endif +#include "../../../../../../zhihui/utils/custom_utils.h" +#include "power_display_service.h" +#include "components/ui_slider.h" + +#include "audio_capture_wrapper.h" +#ifdef SUPPORT_CYWEE_SERVICE +#include "cywee_service.h" +#endif + +#ifdef FD230 + #include "factorytest_protocol.h" +#endif + + + +#include "custom_runtime.h" + +#if defined(SUPPORT_GNSS) +#include "gnss_ctl.h" +#endif + +#ifdef __cplusplus +#if __cplusplus +extern "C" +{ +#endif +#endif +#include "pm_definition.h" +#include "pm_veto.h" +#include "pm.h" +#ifdef __cplusplus +#if __cplusplus +} +#endif +#endif + +namespace OHOS +{ + REGIST_SLICE(VIEW_TEST, testView, testPresenter); + + + static char* view_id_str[]= + { + "TP_1", "TP_2", "TP_3", "TP_4", + "TP_5", "TP_6", "TP_7", "TP_8", + "TP_9","TP_10", "TP_11", "TP_12", + "TP_13","TP_14", "TP_15", "TP_16", + }; + + + // 2.ViewMapper[] 是一个静态的视图映射数组,将视图ID与MainStopWatchView类中的特定成员函数指针进行了绑定。 + extern test_ext Test_ViewMapper_t[]; + // {FACTORYRESETVIEW,"FactoryResetButton",true}, + // {SYSTEMLUPGRADE,"systemupgread",true}, + // {TEST,"testButton",true}}; + + // {ABOUTTHEWATCHVIEW, &SystemView::ChangeSystemAboutView}, + // {SUPERVISEVIEW, &SystemView::ChangeSystemSuperviseView}, + // {SYSTEMLANGUAGEVIEW, &SystemView::ChangeSystemLanguageView}, + + // 当前Presenter属性实例化的内存指针 + static testPresenter *g_pSystemPresenter = nullptr; + + testPresenter::testPresenter() + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "testPresenter::testPresenter"); + g_pSystemPresenter = this; + //systemModel = testModel::GetInstance(); + } + + testPresenter::~testPresenter() + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "testPresenter::~testPresenter"); + g_pSystemPresenter = nullptr; + } + + testPresenter *testPresenter::GetInstance() + { + + return g_pSystemPresenter; + } + + void testPresenter::OnStart() + { + } + + bool testPresenter::OnPress(UIView &view, const PressEvent &event) + { + return true; + } + + bool testPresenter::OnDrag(UIView &view, const DragEvent &event) + { + // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemPresenter::"); + if(strcmp(view.GetViewId(),"BrightnessControl") == 0 || strcmp(view.GetViewId(),"Brightnesview") == 0 ) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "xxxxxxxxxxxxx::"); + uint8_t value= testLUMView::GetInstance()->get_slider_value(); + + const power_display_svr_api_t *display_api = power_display_svr_get_api(); + + if (display_api->set_brightness(value) != ERRCODE_SUCC) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ChangeBrightness: set_brightness fail!"); + return false; + } + + } + + + if(strcmp(view.GetViewId(),"TP_test") == 0) + { + testTPView::GetInstance()->ChangeViewcolor(event.GetLastPoint().x,event.GetLastPoint().y); + + } + return true; + } + + bool testPresenter::OnDragEnd(UIView &view, const DragEvent &event) + { + testView *p_SystemView = testView::GetInstance(); + + if(strcmp(view.GetViewId(),"TP_test") == 0 || strcmp(view.GetViewId(),"BrightnessControl") == 0) + { + return true; + } + + // 放宽的左滑退出限制条件 + if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT) + { + // 获取拖拽的起始点和结束点 + Point startPoint = event.GetStartPoint(); + Point endPoint = event.GetLastPoint(); + + // 计算拖拽距离和速度 + int dragDistance = endPoint.x - startPoint.x; + int dragHeight = abs(endPoint.y - startPoint.y); + + // 放宽的退出条件: + // 1. 水平拖拽距离大于80像素(从150降低到80) + // 2. 垂直偏移不超过80像素(从50放宽到80) + // 3. 起始点在屏幕左侧50%区域内(从30%放宽到50%) + // 4. 水平拖拽距离大于垂直偏移的2倍(从3倍降低到2倍) + int screenWidth = Screen::GetInstance().GetWidth(); + + if (dragDistance > 80 && // 最小拖拽距离80像素 + dragHeight < 80 && // 垂直偏移不超过80像素 + startPoint.x < screenWidth * 0.5 && // 起始点在左侧50%区域 + dragDistance > dragHeight * 2) // 水平距离是垂直距离的2倍以上 + { + for (int i = 1; i < MAX_TESTVIEWID; i++) + { + if (p_SystemView->GetSystemScrollView(i)) + { + p_SystemView->ChangeView(i, TESTVIEW); + break; + } + } + return true; + } + } + return false; + } + + // 该点击回调主要用于在系统视图界面进行跳转视图 + bool testPresenter::OnClick(UIView &view, const ClickEvent &event) + { + // === VIEWID 点击追踪调试 === + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"=== ONCLICK VIEWID DEBUG ===\n"); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"按钮被点击,view.GetViewId() = %s\n", view.GetViewId()); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"view.GetViewId() 地址 = %p\n", view.GetViewId()); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"view.GetViewId() 长度 = %zu\n", strlen(view.GetViewId())); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"按钮类型 = %d\n", view.GetViewType()); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"按钮位置 = (%d, %d)\n", view.GetX(), view.GetY()); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"按钮大小 = %dx%d\n", view.GetWidth(), view.GetHeight()); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"=== ONCLICK VIEWID DEBUG END ===\n"); + + testView *p_SystemView = testView::GetInstance(); + int len=MAX_TESTVIEWID;//sizeof(Test_ViewMapper_t)/sizeof(Test_ViewMapper_t[0]); + //int len=5; + // 根据控件id查找是哪个控件触发了点击回调 + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OnClick %s",view.GetViewId()); + + if(strcmp(view.GetViewId(),"xxxx") == 0) + { + //testSPEAKView::GetInstance()->Changspeak(true); + testView::GetInstance()->ChangeView(SEChipTest,TESTVIEW); + return true; + } + + if(strcmp(view.GetViewId(),"oldtestexit") == 0) + { + //testSPEAKView::GetInstance()->Changspeak(true); + testView::GetInstance()->ChangeView(OLDTEST,TESTVIEW); + return true; + } + if(strcmp(view.GetViewId(),"shutdown") == 0) + { + // #ifdef FD230_650 + uapi_poweroff_device(); + // #endif + return true; + } + if(strcmp(view.GetViewId(),"reset") == 0) + { + // #ifdef FD230_650 + uapi_reboot_device(); + // #endif + + return true; + } + if(strcmp(view.GetViewId(),"deepsleep") == 0) + { + //TODO: close bt and cat1 , then deepsleep + #ifdef SUPPORT_CYWEE_SERVICE + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_STOP_ACC,NULL); + #endif + stop_custom_ble_service(); + LOS_Msleep(50); + uapi_set4GCapability(false); + LOS_Msleep(50); + + uint8_t cnt = pm_veto_get_id_cnt(PM_ID_P_TEST); + if (cnt == 1) { + uapi_pm_remove_sleep_veto(PM_ID_P_TEST); + } else { + // WEARABLE_LOGE(WEARABLE_LOG_MODULE_MAIN_SERVICE,"CAT1 SERVICE MCU has got pm_id_cat1 vote\r\n"); + } + + + // mcu_pm_lcd_off(NULL,NULL); + + const power_display_svr_api_t * display_api = power_display_svr_get_api(); + if (display_api) + { + display_api->turn_off_screen(); + } + + return true; + } + + if(strcmp(view.GetViewId(),"FactoryReset") == 0) + { + //TODO: close bt and cat1 , then deepsleep + do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_TYPE_RESTORE_FACTORY_SETTING, NULL, 0); + return true; + } + + for(int i=0;iChangeView(TESTVIEW, Test_ViewMapper_t[i].viewId); + } + return true; + } + if(strcmp(view.GetViewId(),Test_ViewMapper_t[i].viewid_str_next) == 0) + { + if(Test_ViewMapper_t[i+1].enable_falg==true) { + testView::GetInstance()->ChangeView(Test_ViewMapper_t[i].viewId, Test_ViewMapper_t[i+1].viewId); + } + return true; + } + + } + + // 处理各测试界面的 成功/失败 按钮 + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"view.GetViewId() %s ",view.GetViewId()); + if (strncmp(view.GetViewId(), "TestOK", 6) == 0 || strncmp(view.GetViewId(), "TestNO", 6) == 0) + { + + std::string vid = view.GetViewId(); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"view.GetViewId() %s ",vid.c_str()); + + if(testModel::GetInstance()->SetResult(vid)) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"SetResult成功"); + + // 实时更新按钮颜色 + testView::GetInstance()->UpdateButtonColorByViewId(view.GetViewId()); + + return true; + } + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"SetResult失败"); + return false; + } + + + + if(strcmp(view.GetViewId(),"speak_play") == 0) + { + testSPEAKView::GetInstance()->Changspeak(true); + } + else if (strcmp(view.GetViewId(),"speak_puase") == 0) + { + testSPEAKView::GetInstance()->Changspeak(false); + } + + if(strcmp(view.GetViewId(),"MOTOR_play") == 0) + { + testMOTORView::GetInstance()->Changstatr(true); + } + + if(strcmp(view.GetViewId(),"testmicrohoneView") == 0) + { + testmicrohoneView::GetInstance()->buttoncallback(); + } + + if(strcmp(view.GetViewId(),"dial_112") == 0) + { + #ifdef SUPPORT_CAT1_SERVICE + testcat1View::GetInstance()->dial_112(true); + #endif + } + + if(strcmp(view.GetViewId(),"gray_card") == 0) + { + + testhrsenson1View::GetInstance()->gray_test(true); + } + + + if(strcmp(view.GetViewId(),"leeklight") == 0) + { + + testhrsenson1View::GetInstance()->leeklight_test(true); + } + + if(strcmp(view.GetViewId(),"discovery") == 0) + { + + testBTView::GetInstance()->BT_discovery_callback(); + } + if(strcmp(view.GetViewId(),"addvolume") == 0) + { + testmicrohoneView::GetInstance()->addvolumebuttoncallback(); + } + if(strcmp(view.GetViewId(),"start") == 0) + { + if(uapi_dev_runtime_get_cat1_powerstat()) + uapi_set4GCapability(false); + #ifdef SUPPORT_FACTORY_SERVICE + factorytest_start_aging_test(); + #endif + } + if(strcmp(view.GetViewId(),"stop") == 0) + { +#ifdef SUPPORT_FACTORY_SERVICE + factorytest_stop_aging_test(); +#endif + } + if(strcmp(view.GetViewId(),"exit") == 0) + { + for (int i = 1; i < MAX_TESTVIEWID; i++) + { + if (p_SystemView->GetSystemScrollView(i)) + { + p_SystemView->ChangeView(i, TESTVIEW); + break; + } + } + return true; + } + if(strcmp(view.GetViewId(),"deep") == 0) + { + #ifdef SUPPORT_CYWEE_SERVICE + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_STOP_ACC,NULL); + #endif + stop_custom_ble_service(); + LOS_Msleep(50); + uapi_set4GCapability(false); + LOS_Msleep(50); + + uint8_t cnt = pm_veto_get_id_cnt(PM_ID_P_TEST); + if (cnt == 1) { + uapi_pm_remove_sleep_veto(PM_ID_P_TEST); + } else { + // WEARABLE_LOGE(WEARABLE_LOG_MODULE_MAIN_SERVICE,"CAT1 SERVICE MCU has got pm_id_cat1 vote\r\n"); + } + + + // mcu_pm_lcd_off(NULL,NULL); + + const power_display_svr_api_t * display_api = power_display_svr_get_api(); + if (display_api) + { + display_api->turn_off_screen(); + } + + return true; + } + #ifdef SUPPORT_A5133_SERVICE + if(strcmp(view.GetViewId(),"receive") == 0) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "strcmp(view.GetViewId()recevie"); + testA5133View::GetInstance()->a5133_receive_callback(); + } + + if(strcmp(view.GetViewId(),"transmit") == 0) + { + testA5133View::GetInstance()->a5133_receive_callback(); + } + if(strcmp(view.GetViewId(),"send_data_1") == 0) + { + + testA5133View::GetInstance()->a5133_receive_callback(); + } + if(strcmp(view.GetViewId(),"send_data_2") == 0) + { + + testA5133View::GetInstance()->a5133_receive_callback(); + } + + + + + #endif + + #if defined(SUPPORT_GNSS) + if (strcmp(view.GetViewId(), GPS_OPEN_CONFIRM_BUTTON) == 0) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GPS Toggle Button OnClick"); + + // 切换GPS开关状态 + testGPSView* gpsView = testGPSView::GetInstance(); + if (gpsView != nullptr) + { + gpsView->ToggleGPSState(); + } + } + #endif + return false; + } + + bool testPresenter::OnKeyAct(UIView &view, const KeyEvent &event) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AlarmPresenter::OnKeyAct"); + uint8_t keyID = event.GetKeyId(); + uint8_t keystate=event.GetState(); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, ":xxxxxxx:%d",keyID); + // 如果是power键就返回上一级 + if(testbuttonView::GetInstance()) + { + if (keyID == 41 ) + { + if(keystate) + testbuttonView::GetInstance()-> Changbutton(0,true); + else + testbuttonView::GetInstance()-> Changbutton(0,false); + + // uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId(); + // NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST); + } + if (keyID == 0) + { + if(keystate) + testbuttonView::GetInstance()-> Changbutton(1,true); + else + testbuttonView::GetInstance()-> Changbutton(1,false); + + // uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId(); + // NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST); + } + +#ifdef BOARD_U8 + if (keyID == 1) + { + + if(keystate) + testbuttonView::GetInstance()-> Changbutton(2,true); + else + testbuttonView::GetInstance()-> Changbutton(2,false); + + // uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId(); + // NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST); + } +#endif + + } + + return true; + } + + bool testPresenter::OnRotate(UIView &view, const RotateEvent &event) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "testPresenter::OnRotate %d",event.GetRotate()); + testbuttonView::GetInstance()->Changbutton(event.GetRotate()); + + testbuttonView::GetInstance()->Changbutton(true); + return true; + } + + bool testPresenter::OnRotateEnd(UIView &view, const RotateEvent &event) + { + UNUSED(view); + UNUSED(event); + testbuttonView::GetInstance()->Changbutton(false); + return true; + } + + // 该拖拽是用来处理系统视图(slice)的左滑退出事件和子视图的左滑退出到系统视图区分开 + + + /// @brief 简体中文单选按钮被选中 + /// @param void + /// @return true 表示选中 ,false 表示未选中 + + + /// @brief 英语单选按钮被选中 + /// @param void + /// @return true 表示选中 ,false 表示未选中 + + + /* -------------------------------------------------------------------------- */ + // 获取语言类 + //language *g_planguage = new language; + /* -------------------------------------------------------------------------- */ + // 用来监听语言切换 + +#ifdef __cplusplus +#if __cplusplus +extern "C" +{ +#endif /* __cplusplus */ +#endif /* __cplusplus */ + + void factorytest_enter_test_tp_view(void) + { + if(testView::GetInstance()) + testView::GetInstance()->ChangeView(TESTVIEW,TP); + else + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"xxxxxxxxxxxxxxxxxxxxx\r\n"); + } + + void factorytest_enter_test_lcd_view(void) + { + if( testView::GetInstance()) + testView::GetInstance()->ChangeView(TESTVIEW,LCD); + else + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"xxxxxxxxxxxxxxxxxxxxx\r\n"); + } + + void factorytest_enter_test_button_view(void) + { + testView::GetInstance()->ChangeView(TESTVIEW,BUTTON); + } + +#ifdef __cplusplus +#if __cplusplus +} +#endif /* __cplusplus */ +#endif /* __cplusplus */ } \ No newline at end of file diff --git a/code/sdk/zhihui/services/gnss/sample/pgnss_sample/pgnss_sample.c b/code/sdk/zhihui/services/gnss/sample/pgnss_sample/pgnss_sample.c index 26ba504ae..a7768cc35 100644 --- a/code/sdk/zhihui/services/gnss/sample/pgnss_sample/pgnss_sample.c +++ b/code/sdk/zhihui/services/gnss/sample/pgnss_sample/pgnss_sample.c @@ -57,6 +57,7 @@ static int g_is_pgnss_start=0; static int g_is_pgnss_logon=0; static int g_pgnss_stopflag=0; static int g_cold_start_pgnss_stopflag = 0; +static int g_is_listening_data = 0; // 添加数据监听状态标志 static char *pgnss_log = NULL; @@ -288,6 +289,11 @@ static int32_t StopGnss(tiot_handle handle) static void ListenGnssData(tiot_handle handle) { int32_t i = 0; + + // 设置监听状态标志 + g_is_listening_data = 1; + printf("GPS data listening started\r\n"); + // 写日志 for (;;) { // 写日志条件 @@ -345,11 +351,38 @@ static void ListenGnssData(tiot_handle handle) } } + + // 清除监听状态标志 + g_is_listening_data = 0; + printf("GPS data listening stopped\r\n"); } void PGnssServerStop(void) { - g_pgnss_stopflag=1; + printf("PGnssServerStop: Attempting to stop GPS...\r\n"); + + // 检查GPS是否已经启动 + if (g_is_pgnss_poweron == 0) { + printf("PGnssServerStop: GPS is not powered on, nothing to stop\r\n"); + return; + } + + // 等待数据监听停止(最多等待6秒) + int wait_count = 0; + const int max_wait_ms = 6000; // 最大等待6秒 + const int check_interval_ms = 500; // 每500ms检查一次 + + while (g_is_listening_data == 0 && wait_count < (max_wait_ms / check_interval_ms)) { + LOS_Msleep(check_interval_ms); + wait_count++; + if (wait_count % 2 == 0) { // 每秒打印一次状态(500ms * 2 = 1秒) + printf("PGnssServerStop: Waiting for data listening to stop... (%d/%d)\r\n", + wait_count * check_interval_ms, max_wait_ms); + } + } + + // 设置停止标志 + g_pgnss_stopflag = 1; // 清理pgnss_sample模块的内存 cleanup_agnss_folder_path(); @@ -357,12 +390,6 @@ void PGnssServerStop(void) // 清理pgnss_encode模块的内存 cleanup_pgnss_encode_agnss_folder_path(); - if (pgnss_log != NULL) { - printf("pgnss_log:%s\r\n",pgnss_log); - free(pgnss_log); - pgnss_log = NULL; - } - printf("PGnssServerStop: Force stop completed\r\n"); } @@ -405,6 +432,7 @@ void PGnssServerStartColdStart(void) g_is_pgnss_start = 1; g_pgnss_stopflag = 0; g_cold_start_pgnss_stopflag = 0; + g_is_listening_data = 0; // 初始化监听状态 sw_debug_uart_deinit(); // Step1: init @@ -498,6 +526,7 @@ void PGnssServerStartColdStart(void) g_is_pgnss_poweron = 0; g_is_pgnss_start = 0; + g_pgnss_stopflag = 0; // 清除停止标志 sw_debug_uart_deinit(); uart_config_init(); printf("finish cold start mode\r\n"); @@ -788,13 +817,47 @@ static int pgnss_startup_check(void) void PGnssServerStart(void) { + printf("PGnssServerStart: Attempting to start GPS...\r\n"); + + // 检查是否正在停止过程中 + if (g_pgnss_stopflag == 1) { + printf("PGnssServerStart: GPS is stopping, waiting for stop to complete...\r\n"); + + // 等待停止完成(最多等待6秒) + int wait_count = 0; + const int max_wait_ms = 6000; + const int check_interval_ms = 500; + + while (g_pgnss_stopflag == 1 && wait_count < (max_wait_ms / check_interval_ms)) { + LOS_Msleep(check_interval_ms); + wait_count++; + if (wait_count % 2 == 0) { // 每秒打印一次状态(500ms * 2 = 1秒) + printf("PGnssServerStart: Waiting for stop to complete... (%d/%d)\r\n", + wait_count * check_interval_ms, max_wait_ms); + } + } + + if (g_pgnss_stopflag == 1) { + printf("PGnssServerStart: Warning - Stop did not complete within timeout\r\n"); + // 强制清除停止标志,继续启动 + g_pgnss_stopflag = 0; + } else { + printf("PGnssServerStart: Stop completed, proceeding with start\r\n"); + } + } + if(g_is_pgnss_poweron == 1) { - printf("gnss already on\r\n"); + printf("PGnssServerStart: GPS already powered on\r\n"); return ; } g_is_pgnss_poweron = 1; + + g_pgnss_stopflag = 0; + g_cold_start_pgnss_stopflag = 0; + g_is_listening_data = 0; // 初始化监听状态 + //未绑定直接冷启动 if(cm_getisFirstTimeStart()) { @@ -807,7 +870,9 @@ void PGnssServerStart(void) int check_result = pgnss_startup_check(); if (check_result != 0) { printf("PGNSS startup check failed. Starting cold start mode\n"); - PGnssServerStartColdStart(); + if(!g_pgnss_stopflag) + PGnssServerStartColdStart(); + return; } @@ -833,8 +898,7 @@ void PGnssServerStart(void) #endif g_is_pgnss_start = 1; - g_pgnss_stopflag = 0; - g_cold_start_pgnss_stopflag = 0; + sw_debug_uart_deinit(); // Step1: init int32_t ret = tiot_service_init(); @@ -929,6 +993,7 @@ void PGnssServerStart(void) { g_is_pgnss_start = 0; g_is_pgnss_poweron = 0; + g_pgnss_stopflag = 0; // 清除停止标志 } sw_debug_uart_deinit(); -- 2.17.1