U8 GPS TestUI 添加 1556/1 1556/head 1560/target/1
authorSnickerSun <snickersun@163.com>
Mon, 23 Dec 2024 01:23:31 +0000 (09:23 +0800)
committerSnickerSun <snickersun@163.com>
Mon, 23 Dec 2024 01:23:31 +0000 (09:23 +0800)
21 files changed:
code/sdk/application/wearable/nativeapp/CMakeLists.txt
code/sdk/application/wearable/nativeapp/nativelauncher/include/AppViewIDs.h
code/sdk/application/wearable/nativeapp/nativelauncher/include/NativeLauncher.h
code/sdk/application/wearable/nativeapp/nativelauncher/src/NativeLauncher.cpp
code/sdk/application/wearable/nativeapp/nativeui/TestGPS/include/GPSView.h [new file with mode: 0644]
code/sdk/application/wearable/nativeapp/nativeui/TestGPS/include/TestGPSPresenter.h [new file with mode: 0644]
code/sdk/application/wearable/nativeapp/nativeui/TestGPS/include/TestGPSView.h [new file with mode: 0644]
code/sdk/application/wearable/nativeapp/nativeui/TestGPS/src/GPSView.cpp [new file with mode: 0644]
code/sdk/application/wearable/nativeapp/nativeui/TestGPS/src/TestGPSPresenter.cpp [new file with mode: 0644]
code/sdk/application/wearable/nativeapp/nativeui/TestGPS/src/TestGPSView.cpp [new file with mode: 0644]
code/sdk/application/wearable/nativeapp/nativeui/settings/src/SettingModel.cpp
code/sdk/build/config/target_config/brandy/config.py
code/sdk/zhihui/services/gnss/inc/NMEA0183.h
code/sdk/zhihui/services/gnss/inc/gnss_ctl.h
code/sdk/zhihui/services/gnss/sample/gnss_sample/gnss_sample.c
code/sdk/zhihui/services/gnss/sample/gnss_sample/gnss_sample.h
code/sdk/zhihui/services/gnss/src/NMEA0183.c
code/sdk/zhihui/services/gnss/src/decodenmea.c
code/sdk/zhihui/services/gnss/src/gnss_ctl.c
code/sdk/zhihui/services/gnss/src/nmealist.txt [new file with mode: 0644]
code/sdk/zhihui/services/gnss/src/uart_gnss.c

index 2bdf626..5d9ad93 100644 (file)
@@ -8,6 +8,7 @@ set(PUBLIC_HEADER
     ${CMAKE_CURRENT_SOURCE_DIR}/nativelauncher/include/slices/main
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/screennotify/include
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bluetooth/include
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/TestGPS/include
 )
 
 set(PRIVATE_HEADER
@@ -289,7 +290,19 @@ set(SOURCES
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/main/src/dial/DialStaticImgView.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/main/src/dial/parser/DialBinParser.cpp
 )
+if("TEST_GPS_UI" IN_LIST DEFINES)
+set(PRIVATE_HEADER
+    ${PRIVATE_HEADER}
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/TestGPS/include
 
+)
+set(SOURCES   
+    ${SOURCES}
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/TestGPS/src/GPSView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/TestGPS/src/TestGPSView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/TestGPS/src/TestGPSPresenter.cpp
+)
+endif()
 if("SUPPORT_ALIPAY_SEC" IN_LIST DEFINES)
 set(SOURCES   
     ${SOURCES}
index fa4182e..4310610 100644 (file)
@@ -53,6 +53,7 @@ typedef enum : uint16_t {
     VIEW_ADD_CARD,
     VIEW_SET_DIAL,
     VIEW_SET_DIAL_STYLE,
+    VIEW_GPS_TESTUI, //GPS 测试页面
     VIEW_MAX_INTER_APP, // 在此之前添加native应用ID.
     VIEW_EXTERN_APP = 0xFFFE, // 三方应用
     VIEW_INVALIDE_APP = 0xFFFF,
index b05347e..5fc5bc0 100644 (file)
@@ -38,6 +38,9 @@ public:
     void InitCompassSlice(void);
     void InitOfflineVoice(void);
     void InitConnectPhoneSlice(void);
+    #ifdef TEST_GPS_UI
+    void InitGPSTestSlice(void);
+    #endif
     void InitMainTempSlice(void);
     void InitIndoorWalkSlice(void);
     void InitRebootSlice(void);
index 4762862..51b101d 100644 (file)
 #include "SetDialPresenter.h"
 #include "SetDialStylePresenter.h"
 #include "SetDialStyleView.h"
+#ifdef TEST_GPS_UI
+#include "TestGPSView.h"
+#include "TestGPSPresenter.h"
+#endif
 #ifdef JS_ENABLE
 #include "product_adapter.h"
 #endif
@@ -117,6 +121,9 @@ static const AppViewMapper SLICE_MAPPER[] = {
     {VIEW_ADD_CARD, &NativeLauncher::InitAddCardSlice},
     {VIEW_SET_DIAL, &NativeLauncher::InitSetDialSlice},
     {VIEW_SET_DIAL_STYLE, &NativeLauncher::InitSetDialStyleSlice},
+    #ifdef TEST_GPS_UI
+    {VIEW_GPS_TESTUI, &NativeLauncher::InitGPSTestSlice},
+    #endif
 };
 
 static const ViewIdToString VIEW_MAPPER[] = {
@@ -146,6 +153,7 @@ static const ViewIdToString VIEW_MAPPER[] = {
     {VIEW_ADD_CARD, "AddCard"},
     {VIEW_SET_DIAL, "SetDial"},
     {VIEW_SET_DIAL_STYLE, "SetDialStyle"},
+    {VIEW_GPS_TESTUI, "GPSTest"},
 };
 
 NativeLauncher::NativeLauncher() {}
@@ -279,7 +287,18 @@ void NativeLauncher::InitRebootSlice(void)
     }
     NativeAbility::GetInstance().AddSliceProxy(VIEW_REBOOT, rebootView);
 }
-
+#ifdef TEST_GPS_UI
+void NativeLauncher::InitGPSTestSlice(void)
+{
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::TestGPSUI");
+    SliceProxy *gpsView = new AbilitySliceProxy<TestGPSView, TestGPSPresenter>;
+    if (gpsView == nullptr) {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "gpsView is nullptr");
+        return;
+    }
+    NativeAbility::GetInstance().AddSliceProxy(VIEW_GPS_TESTUI, gpsView);
+}
+#endif
 void NativeLauncher::InitConnectPhoneSlice(void)
 {
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::ConnectPhoneView");
diff --git a/code/sdk/application/wearable/nativeapp/nativeui/TestGPS/include/GPSView.h b/code/sdk/application/wearable/nativeapp/nativeui/TestGPS/include/GPSView.h
new file mode 100644 (file)
index 0000000..526c6bf
--- /dev/null
@@ -0,0 +1,36 @@
+/*\r
+ * Copyright (c) CompanyNameMagicTag 2022-2022. All rights reserved.\r
+ * Description: ConnectSelect View\r
+ * Create: 2022-03-22\r
+ */\r
+\r
+#ifndef GPS_VIEW_H\r
+#define GPS_VIEW_H\r
+\r
+#include "View.h"\r
+#include "TestGPSPresenter.h"\r
+#include "components/ui_label.h"\r
+#include "components/ui_button.h"\r
+#include "components/ui_view_group.h"\r
+#include <string>\r
+\r
+namespace OHOS {\r
+class GPSView {\r
+public:\r
+    GPSView();\r
+    ~GPSView();\r
+    static GPSView *GetInstance();\r
+    UIViewGroup *InitShowUpView(void);\r
+    void updateGPSdata(std::string gpsdata);\r
+    void updateGPSstat(std::string gpsdata);\r
+private:\r
+    void ShowUpTitleLabel(void);\r
+    void CreateUIButton(void);\r
+    UILabel *titleLabel{nullptr};\r
+    UILabel *msgLabel{nullptr};\r
+    UIButton *cancelButton{nullptr};\r
+    UIButton *confirmButton{nullptr};\r
+    UIViewGroup *group{nullptr};\r
+};\r
+} // namespace OHOS\r
+#endif // GPS_VIEW_H
\ No newline at end of file
diff --git a/code/sdk/application/wearable/nativeapp/nativeui/TestGPS/include/TestGPSPresenter.h b/code/sdk/application/wearable/nativeapp/nativeui/TestGPS/include/TestGPSPresenter.h
new file mode 100644 (file)
index 0000000..bad6b27
--- /dev/null
@@ -0,0 +1,44 @@
+/*\r
+ * Copyright (c) CompanyNameMagicTag 2022-2022. All rights reserved.\r
+ * Description: Connect Phone Presenter\r
+ * Create: 2022-01-19\r
+ */\r
+\r
+#ifndef TEST_GPS_PRESENTER_H\r
+#define TEST_GPS_PRESENTER_H\r
+\r
+#include "Presenter.h"\r
+#include "NativeLauncher.h"\r
+#include "NativeAbility.h"\r
+#include "BaseView.h"\r
+\r
+namespace OHOS {\r
+enum TestGPSPresenterNum : uint8_t {\r
+        GPSVIEW = 0,\r
+        GPSVIEW_MAX,\r
+};\r
+\r
+#define GPS_CANCEL_BUTTON "close"\r
+#define GPS_CONFIRM_BUTTON "open"\r
+#define GPS_BACK_BUTTON "backButton"\r
+\r
+#define TEST_GPS_VIEW "testGPSView"\r
+\r
+class TestGPSView;\r
+class TestGPSPresenter : public Presenter<TestGPSView>,\r
+                                 public UIView::OnClickListener,\r
+                                 public UIView::OnDragListener {\r
+public:\r
+    TestGPSPresenter();\r
+    ~TestGPSPresenter();\r
+    static TestGPSPresenter *GetInstance();\r
+    void OnStart() override;\r
+    void OnPause() override;\r
+    void OnResume() override;\r
+    void OnStop() override;\r
+    bool OnClick(UIView& view, const ClickEvent& event) override;\r
+    bool OnDrag(UIView& view, const DragEvent& event) override;\r
+private:\r
+};\r
+} // namespace OHOS\r
+#endif
\ No newline at end of file
diff --git a/code/sdk/application/wearable/nativeapp/nativeui/TestGPS/include/TestGPSView.h b/code/sdk/application/wearable/nativeapp/nativeui/TestGPS/include/TestGPSView.h
new file mode 100644 (file)
index 0000000..ba7d2e9
--- /dev/null
@@ -0,0 +1,65 @@
+/*\r
+ * Copyright (c) CompanyNameMagicTag 2022-2022. All rights reserved.\r
+ * Description: Connect Phone View\r
+ * Create: 2022-01-19\r
+ */\r
+\r
+#ifndef TEST_GPS_VIEW_H\r
+#define TEST_GPS_VIEW_H\r
+\r
+#include "View.h"\r
+#include "TestGPSPresenter.h"\r
+#include "GPSView.h"\r
+#include "AppGroupView.h"\r
+#include "animator/animator.h"\r
+#include "sys/time.h"\r
+namespace OHOS {\r
+constexpr int16_t NUM_GPS_CONTAINER = 1;\r
+\r
+class TestGPSPresenter;\r
+class GPSUpdateAnimatorCallback;\r
+class TestGPSView : public View<TestGPSPresenter> {\r
+public:\r
+    TestGPSView();\r
+    ~TestGPSView();\r
+    static TestGPSView *GetInstance();\r
+    void OnStart() override;\r
+    void OnSetUpView() override;\r
+    void OnTearDownView() override;\r
+    void OnStop() override;\r
+    void ChangeView(int16_t hideView, int16_t showView);\r
+    void updateGPS();\r
+\r
+private:\r
+    bool ChangeGPSView(int16_t hideView, int16_t thisView);\r
+    bool CheckViewParam(int16_t hideView, int16_t showView);\r
+    GPSView *gpsUIView{nullptr};\r
+    UIViewGroup *container[NUM_GPS_CONTAINER]{nullptr};\r
+    typedef bool (TestGPSView::*PreprosssChangeView)(int16_t hideView, int16_t thisView);\r
+    Animator *gpsUpdateAnimator{nullptr};\r
+    PreprosssChangeView preProcessView[NUM_GPS_CONTAINER];\r
+    GPSUpdateAnimatorCallback *callBack;\r
+};\r
+\r
+class GPSUpdateAnimatorCallback : public AnimatorCallback {\r
+public:\r
+    explicit GPSUpdateAnimatorCallback(TestGPSView *GPSView) : gpsview(GPSView) {}\r
+    ~GPSUpdateAnimatorCallback() override {}\r
+\r
+    void Callback(UIView *view) override\r
+    {\r
+\r
+       if (gpsview!=nullptr)\r
+       {\r
+            gpsview->updateGPS();\r
+            \r
+       }else{\r
+            printf("gps animator init fail");\r
+       }\r
+    }\r
+private:\r
+    TestGPSView *gpsview=nullptr;\r
+    \r
+};\r
+} // namespace OHOS\r
+#endif // DISTEST_GPS_VIEW_H
\ No newline at end of file
diff --git a/code/sdk/application/wearable/nativeapp/nativeui/TestGPS/src/GPSView.cpp b/code/sdk/application/wearable/nativeapp/nativeui/TestGPS/src/GPSView.cpp
new file mode 100644 (file)
index 0000000..8945fa4
--- /dev/null
@@ -0,0 +1,147 @@
+/*\r
+ * Copyright (c) CompanyNameMagicTag 2022-2022. All rights reserved.\r
+ * Description: ConnectSelect View\r
+ * Create: 2022-03-22\r
+ */\r
+#include "GPSView.h"\r
+#include "wearable_log.h"\r
+#include "UiConfig.h"\r
+#include "TestGPSPresenter.h"\r
+\r
+namespace OHOS {\r
+static GPSView *g_pGPSView{nullptr};\r
+\r
+GPSView::GPSView()\r
+{\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "GPSView::GPSView");\r
+    g_pGPSView = this;\r
+}\r
+\r
+GPSView::~GPSView()\r
+{\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "GPSView::~GPSView");\r
+    group->RemoveAll();\r
+    delete titleLabel;\r
+    titleLabel = nullptr;\r
+    delete msgLabel;\r
+    msgLabel = nullptr;\r
+    delete cancelButton;\r
+    cancelButton = nullptr;\r
+    delete confirmButton;\r
+    confirmButton = nullptr;\r
+    g_pGPSView = nullptr;\r
+}\r
+\r
+GPSView *GPSView::GetInstance()\r
+{\r
+    return g_pGPSView;\r
+}\r
+void GPSView::updateGPSstat(std::string gpsdata)\r
+{\r
+     if (titleLabel != nullptr) {\r
+        titleLabel->SetText(gpsdata.c_str());\r
+     }\r
+}\r
+void GPSView::updateGPSdata(std::string gpsdata)\r
+{\r
+     if (msgLabel != nullptr) {\r
+        msgLabel->SetText(gpsdata.c_str());\r
+     }\r
+}\r
+void GPSView::ShowUpTitleLabel()\r
+{\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "GPSView::ShowUpTitleLabel");\r
+    if (titleLabel == nullptr) {\r
+        titleLabel = new UILabel();\r
+        if (titleLabel == nullptr) {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GPSView titleLabel new fail");\r
+            return;\r
+        }\r
+        titleLabel->SetPosition(65, 50, 324, 160); // 65:x, 100:y, 324:width, 160:height\r
+        titleLabel->SetText("GPS测试");\r
+        titleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 35); // 35:font data\r
+        titleLabel->SetStyle(STYLE_BACKGROUND_COLOR, OPA_OPAQUE);\r
+        titleLabel->SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER,\r
+                             UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER);\r
+        titleLabel->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);\r
+        group->Add(titleLabel);\r
+    }\r
+    if (msgLabel == nullptr) {\r
+        msgLabel = new UILabel();\r
+        if (msgLabel == nullptr) {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GPSView msgLabel new fail");\r
+            return;\r
+        }\r
+        msgLabel->SetPosition(65, 100, 324, 160); // 65:x, 100:y, 324:width, 160:height\r
+        msgLabel->SetText("");\r
+        msgLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 20); // 35:font data\r
+        msgLabel->SetStyle(STYLE_BACKGROUND_COLOR, OPA_OPAQUE);\r
+        msgLabel->SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_LEFT,\r
+                             UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER);\r
+        msgLabel->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);\r
+        group->Add(msgLabel);\r
+    }\r
+    \r
+}\r
+\r
+void GPSView::CreateUIButton()\r
+{\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "GPSView::CreateUIButton");\r
+    UIView::OnClickListener *clickListener = (UIView::OnClickListener *)OHOS::TestGPSPresenter::GetInstance();\r
+    if (clickListener == nullptr) {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "clickListener nullptr");\r
+            return;\r
+    }\r
+    if (cancelButton == nullptr) {\r
+        cancelButton = new UIButton();\r
+        if (cancelButton == nullptr) {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GPSView cancelButton new fail");\r
+            return;\r
+        }\r
+        cancelButton->SetPosition(85, 400, 90, 90); // 85:x, 320:y, 90:width, 90:height\r
+        cancelButton->SetViewId(GPS_CANCEL_BUTTON);\r
+        cancelButton->SetImageSrc(ALARM_DELETE_ADD_PATH, ALARM_DELETE_ADD_PATH);\r
+        cancelButton->SetOnClickListener(clickListener);\r
+        group->Add(cancelButton);\r
+    }\r
+    if (confirmButton == nullptr) {\r
+        confirmButton = new UIButton();\r
+        if (confirmButton == nullptr) {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GPSView confirmButton new fail");\r
+            return;\r
+        }\r
+        confirmButton->SetPosition(279, 400, 90, 90); // 279:x, 320:y, 90:width, 90:height\r
+        confirmButton->SetViewId(GPS_CONFIRM_BUTTON);\r
+        confirmButton->SetImageSrc(ALARM_TRUE_ADD_PATH, ALARM_TRUE_ADD_PATH);\r
+        confirmButton->SetOnClickListener(clickListener);\r
+        group->Add(confirmButton);\r
+    }\r
+}\r
+\r
+UIViewGroup *GPSView::InitShowUpView()\r
+{\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "GPSView init");\r
+    if (group == nullptr) {\r
+        group = new UIViewGroup();\r
+        if (group == nullptr) {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group new fail");\r
+            return nullptr;\r
+        }\r
+        group->SetPosition(0, 0);\r
+        group->SetWidth(HORIZONTAL_RESOLUTION);\r
+        group->SetHeight(VERTICAL_RESOLUTION);\r
+    }\r
+    ShowUpTitleLabel();\r
+    CreateUIButton();\r
+    UIView::OnDragListener *connectDragListener = (UIView::OnDragListener *)OHOS::TestGPSPresenter::GetInstance();\r
+    if (connectDragListener == nullptr) {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "connectDragListener GetInstance fail");\r
+        return nullptr;\r
+    }\r
+    group->SetOnDragListener(connectDragListener);\r
+    group->SetViewId(TEST_GPS_VIEW);\r
+    group->SetDraggable(true);\r
+    group->SetTouchable(true);\r
+    return group;\r
+}\r
+}
\ No newline at end of file
diff --git a/code/sdk/application/wearable/nativeapp/nativeui/TestGPS/src/TestGPSPresenter.cpp b/code/sdk/application/wearable/nativeapp/nativeui/TestGPS/src/TestGPSPresenter.cpp
new file mode 100644 (file)
index 0000000..f17092b
--- /dev/null
@@ -0,0 +1,84 @@
+/*\r
+ * Copyright (c) CompanyNameMagicTag 2022-2022. All rights reserved.\r
+ * Description: Connect Phone Presenter\r
+ * Create: 2022-01-19\r
+ */\r
+\r
+#include "TestGPSPresenter.h"\r
+#include "TestGPSView.h"\r
+#include "BluetoothModel.h"\r
+#include "bts_br_gap.h"\r
+#include "bts_le_gap.h"\r
+#include "drag_event.h"\r
+#include "cmsis_os.h"\r
+#include "UiConfig.h"\r
+#include "wearable_log.h"\r
+#include "custom_utils.h"\r
+#include "gnss_ctl.h"\r
+namespace OHOS {\r
+\r
+static TestGPSPresenter *g_pTestGPSPresenter = nullptr;\r
+\r
+TestGPSPresenter::TestGPSPresenter()\r
+{\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TestGPSPresenter::TestGPSPresenter");\r
+    g_pTestGPSPresenter = this;\r
+}\r
+\r
+TestGPSPresenter::~TestGPSPresenter()\r
+{\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TestGPSPresenter::~TestGPSPresenter");\r
+    g_pTestGPSPresenter = nullptr;\r
+}\r
+\r
+TestGPSPresenter *TestGPSPresenter::GetInstance()\r
+{\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TestGPSPresenter GetInstance");\r
+    return g_pTestGPSPresenter;\r
+}\r
+\r
+void TestGPSPresenter::OnStart()\r
+{\r
+    Presenter<TestGPSView>::OnStart();\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TestGPSPresenter::On Start ");\r
+    ScreenAlwaysOnCtr(1);\r
+}\r
+\r
+void TestGPSPresenter::OnPause(void) {}\r
+\r
+void TestGPSPresenter::OnResume(void) {}\r
+\r
+void TestGPSPresenter::OnStop(void) {\r
+    ScreenAlwaysOnCtr(0);\r
+}\r
+\r
+bool TestGPSPresenter::OnClick(UIView& view, const ClickEvent& event)\r
+{\r
+    UNUSED(event);\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OnClick OnClick");\r
+    if (strcmp(view.GetViewId(), GPS_CANCEL_BUTTON) == 0) {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GPS Off OnClick");\r
+        gnss_stop();\r
+    } else if (strcmp(view.GetViewId(), GPS_CONFIRM_BUTTON) == 0) {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GPS On OnClick");\r
+        gnss_start();\r
+    } else if (strcmp(view.GetViewId(), GPS_BACK_BUTTON) == 0) {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Cancel OnClick");\r
+    }    \r
+    // NativeAbility::GetInstance().ChangeSlice(VIEW_SETTING);\r
+    return true;\r
+}\r
+\r
+bool TestGPSPresenter::OnDrag(UIView& view, const DragEvent& event)\r
+{\r
+    std::string viewId = view.GetViewId();\r
+    if ((viewId == TEST_GPS_VIEW) ) {\r
+        if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT) {\r
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TestGPSPresenter::OnDrag");\r
+            NativeAbility::GetInstance().ChangeSlice(VIEW_SETTING);\r
+        }\r
+    }\r
+    return true;\r
+}\r
+\r
+}\r
diff --git a/code/sdk/application/wearable/nativeapp/nativeui/TestGPS/src/TestGPSView.cpp b/code/sdk/application/wearable/nativeapp/nativeui/TestGPS/src/TestGPSView.cpp
new file mode 100644 (file)
index 0000000..f3d089a
--- /dev/null
@@ -0,0 +1,177 @@
+/*\r
+ * Copyright (c) CompanyNameMagicTag 2022-2022. All rights reserved.\r
+ * Description: Connect Phone View\r
+ * Create: 2022-01-19\r
+ */\r
+\r
+#include "TestGPSView.h"\r
+#include "components/ui_label.h"\r
+#include "wearable_log.h"\r
+#include "UiConfig.h"\r
+#include <string>\r
+#include "NMEA0183.h"\r
+#include "gnss_sample.h"\r
+\r
+namespace OHOS {\r
+static TestGPSView *g_pTestGPSView{nullptr};\r
+\r
+TestGPSView::TestGPSView()\r
+{\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TestGPSView::TestGPSView");\r
+    preProcessView[GPSVIEW] = &TestGPSView::ChangeGPSView;\r
+    g_pTestGPSView = this;\r
+    callBack = new GPSUpdateAnimatorCallback(g_pTestGPSView);\r
+    if (callBack == nullptr) {\r
+        GRAPHIC_LOGE("callBack new fail\n");\r
+        return ;\r
+    }\r
+    gpsUpdateAnimator = new Animator(callBack, (OHOS::UIView*)g_pTestGPSView, 1000, true);\r
+    if (gpsUpdateAnimator == nullptr) {\r
+        GRAPHIC_LOGE("gpsUpdateAnimator new fail\n");\r
+        return ;\r
+    }\r
+    gpsUpdateAnimator->Start();\r
+}\r
+\r
+TestGPSView::~TestGPSView()\r
+{\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TestGPSView::~TestGPSView");\r
+    if (gpsUpdateAnimator != nullptr) {\r
+        gpsUpdateAnimator->Stop();\r
+        delete gpsUpdateAnimator;\r
+        gpsUpdateAnimator = nullptr;\r
+    }\r
+    g_pTestGPSView = nullptr;\r
+}\r
+\r
+TestGPSView *TestGPSView::GetInstance()\r
+{\r
+    return g_pTestGPSView;\r
+}\r
+\r
+static char msgtmp[256]={0};\r
+\r
+void TestGPSView::updateGPS()\r
+{\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TestGPSView::updateGPS");\r
+    if (gpsUIView != nullptr) {\r
+       \r
+        gps_data_t * gpsdata=getGPSGlobaldata();\r
+        gps_data_t gpsd={0};\r
+        if (gpsdata->last_gps_time_ms>0)\r
+        {\r
+            memcpy(&gpsd,gpsdata,sizeof(gps_data_t));\r
+        }\r
+        memset_s(msgtmp,sizeof(msgtmp),0,sizeof(msgtmp));        \r
+        dump_location_data_to_buf(&gpsd,msgtmp,sizeof(msgtmp));\r
+        PRINT("dump %s\n",msgtmp);\r
+        gpsUIView->updateGPSdata(msgtmp);\r
+        if (getGnssServerStat()==1)\r
+        {\r
+            gpsUIView->updateGPSstat("GPS已开启");\r
+        }else{\r
+            gpsUIView->updateGPSstat("GPS已关闭");\r
+        }\r
+    }\r
+}\r
+void TestGPSView::OnStart()\r
+{\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TestGPSView::~OnStart");\r
+    View<TestGPSPresenter>::OnStart();\r
+    BaseView::RootView(Color::Black().full);\r
+    ChangeView(GPSVIEW_MAX, GPSVIEW);\r
+    RootView::GetInstance()->Invalidate();\r
+    return;\r
+}\r
+\r
+void TestGPSView::OnSetUpView()\r
+{\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TestGPSView::~OnSetUpView");\r
+    View<TestGPSPresenter>::OnSetUpView();\r
+    Draw();\r
+}\r
+\r
+void TestGPSView::OnTearDownView()\r
+{\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TestGPSView::~OnTearDownView");\r
+    View<TestGPSPresenter>::OnTearDownView();\r
+    return;\r
+}\r
+\r
+void TestGPSView::OnStop()\r
+{\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TestGPSView::~OnStop");\r
+    View<TestGPSPresenter>::OnStop();\r
+    if (container_ != nullptr) {\r
+        container_->RemoveAll();\r
+        delete container_;\r
+        container_ = nullptr;\r
+    }\r
+    RootView::GetInstance()->ClearOnKeyActListener();\r
+    RootView::GetInstance()->RemoveAll();\r
+    return;\r
+}\r
+\r
+bool TestGPSView::ChangeGPSView(int16_t hideView, int16_t thisView)\r
+{\r
+    UNUSED(hideView);\r
+    if (container[thisView] == nullptr) {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChangeGPSView");\r
+        gpsUIView = new GPSView();\r
+        if (gpsUIView == nullptr) {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "gpsUIView new fail");\r
+            return false;\r
+        }\r
+        // init view\r
+        UIViewGroup *group = gpsUIView->InitShowUpView();\r
+        if (group == nullptr) {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group nullptr fail");\r
+            return false;\r
+        }\r
+        container[thisView] = group;\r
+        RootView::GetInstance()->Add(container[thisView]);\r
+    }\r
+    return true;\r
+}\r
+\r
+bool TestGPSView::CheckViewParam(int16_t hideView, int16_t showView)\r
+{\r
+    if (showView < 0 || showView >= GPSVIEW_MAX) {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TestGPSView::CheckViewParam showView err.");\r
+        return false;\r
+    }\r
+\r
+    if (hideView < 0 || hideView > GPSVIEW_MAX) {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TestGPSView::CheckViewParam hideView err.");\r
+        return false;\r
+    }\r
+\r
+    return true;\r
+}\r
+\r
+void TestGPSView::ChangeView(int16_t hideView, int16_t showView)\r
+{\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TestGPSView::ChangeView %d, %d", hideView, showView);\r
+\r
+    if (!CheckViewParam(hideView, showView)) {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TestGPSView::CheckViewParam failed.");\r
+        return;\r
+    }\r
+\r
+    PreprosssChangeView tmpPreProcessView = preProcessView[showView];\r
+\r
+    if (!(this->*tmpPreProcessView)(hideView, showView)) {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TestGPSView::ChangeView %d %dfailed", showView, hideView);\r
+        return;\r
+    }\r
+    if (hideView != GPSVIEW_MAX) {\r
+        if (container[hideView] == nullptr) {\r
+            return;\r
+        }\r
+        container[hideView]->SetVisible(false);\r
+    }\r
+    container[showView]->SetVisible(true);\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TestGPSView:: ChangeView end!!!%d", showView);\r
+    RootView::GetInstance()->Invalidate();\r
+}\r
+}
\ No newline at end of file
index 8390cb1..acb8738 100644 (file)
@@ -23,6 +23,10 @@ namespace OHOS {
     {
         int index = 0;
         settings[index++] = {VIEW_BLUETOOTH_EARPHONE, PNG_BLUETOOTH_STITLE, "蓝牙耳机", true};
+       
+        #ifdef TEST_GPS_UI
+        settings[index++] = {VIEW_GPS_TESTUI, PNG_CONNECT_PHONE_IMAGE, "GPS", true};
+        #endif
         #ifdef TEST_4G_UI
         settings[index++] = {VIEW_CONNECT_PHONE, PNG_CONNECT_PHONE_IMAGE, "4G开关", true};
         #else
index 219cbd0..df3a3bf 100644 (file)
@@ -460,6 +460,7 @@ target = {
                     #"MEM_CHECK",
                     #'ENABLE_WEBSOCKET',
                     'SINGLE_USER_PARTITION',
+                    'TEST_GPS_UI',
                     'BOARD_U8',
                     'GNSS_UART0',
                     'SUPPORT_AUTO_OTA_SERVER', 
index 17febca..9f0adb6 100644 (file)
@@ -33,8 +33,8 @@ $PNTH001,0.000000,0.00,0.00,300000.00,1,0,0*1D
 $PNTH002,,T,0.000000,0,200,0.000000,3,0.000000*4B\r
 \r
 \r
-               gps_nmea gps_nmea_temp;   /// 定义解析时用到的暂存状态数据,只供解析时使用 \r
-               gps_data gps_data1;       /// GPS解析得到的最终数据,用户可使用 \r
+               gps_nmea_t gps_nmea_temp;   /// 定义解析时用到的暂存状态数据,只供解析时使用 \r
+               gps_data_t gps_data1;       /// GPS解析得到的最终数据,用户可使用 \r
                unsigned int index = 0;\r
                \r
                for(index=0; index<sizeof(nmea); ++index)\r
@@ -55,7 +55,9 @@ $PNTH002,,T,0.000000,0,200,0.000000,3,0.000000*4B
 \r
 #ifndef NMEA0183_H\r
 #define NMEA0183_H\r
-\r
+#ifdef __cplusplus\r
+extern "C" {\r
+#endif /* __cplusplus */\r
 /*************** 宏定义  *******************/ \r
 #define current_time_ms() 1\r
 \r
@@ -125,7 +127,7 @@ QZSS L1C/A          1~4                           193~196               PRN-192
 */\r
        typedef enum _location_system\r
        {\r
-               GNSS,                   //GN\r
+               GNSS_,                  //GN\r
                GPS_L1C_A=1,    //GP\r
                GLONASS_L1OF,   //GL\r
                Galileo_E1C,    //GA\r
@@ -184,7 +186,7 @@ QZSS L1C/A          1~4                           193~196               PRN-192
                unsigned int gsvpagecount;\r
                unsigned int gsvpage;\r
                unsigned int startnum;\r
-       }gps_nmea;\r
+       }gps_nmea_t;\r
        \r
        /* 时间结构体 */ \r
        typedef struct _time\r
@@ -212,13 +214,13 @@ QZSS L1C/A                1~4                           193~196               PRN-192
         unsigned char num_sats;            /* 可见卫星颗数 */\r
         unsigned char have_gps_yaw;        /* GPHDT航向字段有效 */\r
         unsigned int last_gps_time_ms;     /* 最后获取GPS信息时的时间  ms */\r
-    }gps_data;\r
+    }gps_data_t;\r
     \r
     /* NMEA0183结构体对象 */\r
     typedef struct _nmea0183\r
        {\r
-               gps_nmea gpsParse;\r
-               gps_data gpsData;\r
+               gps_nmea_t gpsParse;\r
+               gps_data_t gpsData;\r
                unsigned char (*nmea_decode)(struct _nmea0183* pnmea, char c);          \r
        }NMEA0183; \r
     \r
@@ -227,8 +229,13 @@ QZSS L1C/A                 1~4                           193~196               PRN-192
 unsigned char nmea_decode(NMEA0183* pnmea, char c);\r
 char* get_gps_status_str(gps_status status);\r
 char* get_gps_sentence_type_str(sentence_types sentencetype);\r
-void dump_location_data(gps_data *locationdata);\r
+void dump_location_data(gps_data_t *locationdata);\r
+void dump_location_data_to_buf(gps_data_t *locationdata,char* buf,int max_buflen);\r
+gps_data_t * getGPSGlobaldata(void);\r
 \r
+#ifdef __cplusplus\r
+}\r
+#endif /* __cplusplus */\r
 #endif\r
 \r
 \r
index a77dc53..9c4a766 100644 (file)
@@ -14,7 +14,9 @@
 
 #ifndef __CUSTOM_GNSS_CTL_H
 #define __CUSTOM_GNSS_CTL_H
-
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
 #include "stdint.h"
 #include "errcode.h"
 
@@ -25,5 +27,7 @@ errcode_t gnss_load_cfg(void);
 errcode_t gnss_start(void);
 errcode_t gnss_stop(void);
 uint8_t is_gnss_on(void);
-
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
 #endif
index b2ee187..afa4dd9 100644 (file)
@@ -140,18 +140,20 @@ static int32_t StopGnss(tiot_handle handle)
 }\r
 \r
 #include "NMEA0183.h"\r
-NMEA0183 g_nmeadata={0};\r
-gps_data g_global_gpsData={0};\r
+static NMEA0183 g_nmeadata={0};\r
+gps_data_t g_global_gpsData={0};\r
+\r
 static int decode_nmea(char c)\r
 {\r
     int ret=0;\r
-    if(nmea_decode(&g_nmeadata,c) ) ///调用解析函数\r
+    ret=0;\r
+    if(nmea_decode(&g_nmeadata,c) ==1 ) ///调用解析函数\r
     {\r
-        // dump_nmea_str(&(g_nmeadata.gpsParse));\r
-        if (g_nmeadata.gpsParse.sentence_type == GPS_SENTENCE_TH002)\r
+        dump_nmea_str(&(g_nmeadata.gpsParse));\r
+        if (g_nmeadata.gpsParse.sentence_type == GPS_SENTENCE_TH002 )\r
         {\r
             //一组数据最后一条\r
-            memcpy_s(&g_global_gpsData,sizeof(gps_data),&(g_nmeadata.gpsData),sizeof(gps_data));\r
+            memcpy_s(&g_global_gpsData,sizeof(gps_data_t),&(g_nmeadata.gpsData),sizeof(gps_data_t));\r
             ret = 1;\r
             memset(&g_nmeadata,0,sizeof(g_nmeadata));\r
         }\r
@@ -159,6 +161,14 @@ static int decode_nmea(char c)
 \r
     return ret;\r
 }\r
+gps_data_t * getGPSGlobaldata(void)\r
+{\r
+    return &g_global_gpsData;\r
+}\r
+\r
+static int g_is_gnss_poweron=0;\r
+static int g_is_gnss_logon=0;\r
+static int g_gnss_stopflag=0;\r
 \r
 static void ListenGnssData(tiot_handle handle)\r
 {\r
@@ -173,12 +183,14 @@ static void ListenGnssData(tiot_handle handle)
                 g_gnssServiceBuff[ret] = '\0';\r
                 char* pbuf=(char *)&g_gnssServiceBuff[MSG_CONTENT_IDX];\r
                 printf("%s\n", pbuf);\r
-                fprintf(g_gnssLogFp, "%s\n", pbuf);\r
+                if (g_is_gnss_logon)\r
+                    fprintf(g_gnssLogFp, "%s\n", pbuf);\r
                 for (int index=0;index < ret ;index++)\r
                 {\r
-                    if (decode_nmea(pbuf[index]))\r
+                    if (decode_nmea(pbuf[index])==1)\r
                     {\r
-                        dump_location_data(&g_global_gpsData);\r
+                        // dump_location_data(&g_global_gpsData);\r
+                        printf("decode_nmea done\r\n");\r
                     }\r
                 }\r
             }\r
@@ -188,13 +200,32 @@ static void ListenGnssData(tiot_handle handle)
             printf("\ncnt enough\n");\r
             break;\r
         }\r
+        if (g_gnss_stopflag == 1)\r
+        {\r
+            break;\r
+        }\r
     }\r
 }\r
+void GnssServerStop(void)\r
+{\r
+    g_gnss_stopflag=1;\r
+}\r
+int getGnssServerStat(void)\r
+{\r
+    return g_is_gnss_poweron;\r
+}\r
 \r
-void GnssExecuteSamples(void)\r
+void GnssServerStart(void)\r
 {\r
-    uapi_pm_add_sleep_veto(PM_ID_SYS);\r
     printf("\nenter gnss samples\n");\r
+    if(g_is_gnss_poweron == 1)\r
+    {\r
+        printf("gnss already on\r\n");\r
+        return ;\r
+    }\r
+    uapi_pm_add_sleep_veto(PM_ID_SYS);\r
+    g_is_gnss_poweron = 1;\r
+    g_gnss_stopflag = 0;\r
     // Step1: init\r
     int32_t ret = tiot_service_init();\r
     if (ret != 0) {\r
@@ -202,10 +233,13 @@ void GnssExecuteSamples(void)
     }\r
 \r
     // 打开日志文件\r
-    g_gnssLogFp = fopen("/user/gnss.log", "w");\r
-    if (g_gnssLogFp == NULL) {\r
-        printf("\nerror: open log file error\n");\r
-        return;\r
+    if (g_is_gnss_logon)\r
+    {\r
+        g_gnssLogFp = fopen("/user/gnss.log", "w");\r
+        if (g_gnssLogFp == NULL) {\r
+            printf("\nerror: open log file error\n");\r
+            return;\r
+        }\r
     }\r
     printf("\nbefore open tiot service\n");\r
 \r
@@ -248,10 +282,14 @@ void GnssExecuteSamples(void)
     // Step7: power off gnss\r
     tiot_service_close(handle);\r
     // 关日志文件\r
-    fclose(g_gnssLogFp);\r
-    g_gnssLogFp = NULL;\r
+    if (g_is_gnss_logon)\r
+    {\r
+        fclose(g_gnssLogFp);\r
+        g_gnssLogFp = NULL;\r
+    }\r
     // Step8: deinit\r
     tiot_service_deinit();\r
     uapi_pm_remove_sleep_veto(PM_ID_SYS);\r
+    g_is_gnss_poweron=0;\r
     printf("\nfinish gnss samples\n");\r
 }
\ No newline at end of file
index 9d3d275..72d28aa 100644 (file)
@@ -6,7 +6,13 @@
  */\r
 #ifndef GNSS_SAMPLE_H\r
 #define GNSS_SAMPLE_H\r
-\r
-void GnssExecuteSamples(void);\r
-\r
+#ifdef __cplusplus\r
+extern "C" {\r
+#endif /* __cplusplus */\r
+void GnssServerStart(void);\r
+void GnssServerStop(void);\r
+int getGnssServerStat(void);\r
+#ifdef __cplusplus\r
+}\r
+#endif /* __cplusplus */\r
 #endif
\ No newline at end of file
index b772c41..5d0fda7 100644 (file)
@@ -1,8 +1,13 @@
 \r
 #include "NMEA0183.h"\r
+#ifndef NOUTILS\r
+#include "custom_utils.h"\r
+#include <securec.h>\r
+#endif\r
 #include <stdio.h>\r
+\r
 static short int from_hex(char a);\r
-static unsigned char nmea_term_complete(gps_nmea* pnmea, gps_data* pdata);\r
+static unsigned char nmea_term_complete(gps_nmea_t* pnmea, gps_data_t* pdata);\r
 static int sring_to_int(const char* pstr, unsigned char* b);\r
 static int int_pow(int value, unsigned int count);\r
 static double double_pow(double value, unsigned int count);\r
@@ -10,7 +15,7 @@ static unsigned char float_to_string(double value, char* pdest, unsigned int int
 static unsigned char int_to_string(int value, char* pdest, unsigned int intgr) ;\r
 static double string_to_float(const char* pstr, unsigned char* b); \r
 static int sring_to_int(const char* pstr, unsigned char* b); \r
-static int make_date_time(gps_data* pdata, unsigned int date, unsigned int time);\r
+static int make_date_time(gps_data_t* pdata, unsigned int date, unsigned int time);\r
 \r
 /* GPS数据解析 */ \r
 unsigned char nmea_decode(NMEA0183* nmea, char c)\r
@@ -67,7 +72,7 @@ static short int from_hex(char a)
 }\r
 \r
 /* 处理单个字段域数据 */\r
-static unsigned char nmea_term_complete(gps_nmea* pnmea, gps_data* pdata)\r
+static unsigned char nmea_term_complete(gps_nmea_t* pnmea, gps_data_t* pdata)\r
 {\r
        if((void*)0==pnmea || (void*)0==pdata) return 0;\r
     // handle the last term in a message\r
@@ -80,8 +85,10 @@ static unsigned char nmea_term_complete(gps_nmea* pnmea, gps_data* pdata)
                {\r
             if (pnmea->gps_data_good) \r
                        {\r
-                unsigned int now = current_time_ms();\r
-                \r
+                unsigned int now = 1 ;\r
+#ifndef NOUTILS\r
+                               uapi_get_timestampe_ms(&now);\r
+#endif\r
                 switch (pnmea->sentence_type) \r
                                {\r
                        case GPS_SENTENCE_RMC:\r
@@ -93,7 +100,6 @@ static unsigned char nmea_term_complete(gps_nmea* pnmea, gps_data* pdata)
                            pdata->ground_speed     = pnmea->new_speed;\r
                            pdata->ground_course    = pnmea->new_course;\r
                                                make_date_time(pdata, pnmea->new_date, pnmea->new_time);\r
-                           pdata->last_gps_time_ms = now;\r
                            \r
                            break;\r
                        case GPS_SENTENCE_GGA:\r
@@ -170,6 +176,9 @@ static unsigned char nmea_term_complete(gps_nmea* pnmea, gps_data* pdata)
                                        case GPS_SENTENCE_ZDA:\r
                            pnmea->last_ZDA_ms = now;\r
                                                break;\r
+                                       case GPS_SENTENCE_TH002:\r
+                           pdata->last_gps_time_ms = now;\r
+                                               break;\r
                 }\r
             } else {\r
                 switch (pnmea->sentence_type) {\r
@@ -218,7 +227,7 @@ static unsigned char nmea_term_complete(gps_nmea* pnmea, gps_data* pdata)
                                pnmea->location_system = Galileo_E1C;\r
                                break;\r
                        case 'N':\r
-                               pnmea->location_system = GNSS;\r
+                               pnmea->location_system = GNSS_;\r
                                break;\r
                        default:\r
                                pnmea->location_system = MAX_LOCATION_SYSTEM;\r
@@ -245,7 +254,7 @@ static unsigned char nmea_term_complete(gps_nmea* pnmea, gps_data* pdata)
             pnmea->sentence_type = GPS_SENTENCE_TH001;\r
         } else if (strcmp(term_type, "TH002") == 0) {;\r
             pnmea->sentence_type = GPS_SENTENCE_TH002;\r
-        \r
+            pnmea->gps_data_good = 1;\r
         }else if (strcmp(term_type, "VTG") == 0) {\r
             pnmea->sentence_type = GPS_SENTENCE_VTG;\r
             // VTG may not contain a data qualifier, presume the solution is good\r
@@ -612,7 +621,7 @@ static unsigned char int_to_string(int value, char* pdest, unsigned int intgr)
 }\r
 \r
 /* 时间处理  传入参数为日月年和毫秒*/ \r
-static int make_date_time(gps_data* pdata, unsigned int date, unsigned int time)\r
+static int make_date_time(gps_data_t* pdata, unsigned int date, unsigned int time)\r
 {\r
        \r
        unsigned char year, mon, day, hour, min, sec;\r
@@ -726,7 +735,7 @@ char* get_gps_location_system_str(location_system_t lsystem)
 {\r
 switch(lsystem)\r
    {\r
-               case GNSS:\r
+               case GNSS_:\r
                        return "全球导航卫星系统";\r
                case GPS_L1C_A:\r
                        return "全球定位系统";\r
@@ -743,25 +752,33 @@ switch(lsystem)
    } \r
 }\r
 \r
-void dump_nmea_str(gps_nmea *nmeadata)\r
+void dump_nmea_str(gps_nmea_t *nmeadata)\r
 {\r
 \r
        printf("\r\n");\r
        printf("%s\r\n",get_gps_location_system_str(nmeadata->location_system));\r
        printf("%s\r\n",get_gps_sentence_type_str(nmeadata->sentence_type));\r
+       printf("gps_data_good %d\r\n",nmeadata->gps_data_good);\r
+\r
        printf("\r\n");\r
 }\r
-void dump_location_data(gps_data*locationdata)\r
+#define DUMP_BUF_SIZE 1024\r
+void dump_location_data_to_buf(gps_data_t *locationdata,char* buf,int max_buflen)\r
 {\r
-\r
-       printf("\r\n");\r
-       printf("20%02d-%02d-%02d,\r\n定位状态(%s)\r\n",\r
+       \r
+       char *tmpbuf=(char*)malloc(DUMP_BUF_SIZE);\r
+       if (tmpbuf == NULL) return;\r
+#ifndef NOUTILS\r
+       memset_s(tmpbuf,DUMP_BUF_SIZE,0,DUMP_BUF_SIZE);\r
+       sprintf_s(tmpbuf,DUMP_BUF_SIZE,"20%02d-%02d-%02d,\n定位状态(%s)\n",\r
     locationdata->date_time.year,\r
     locationdata->date_time.month,\r
     locationdata->date_time.day,\r
     get_gps_status_str(locationdata->status)\r
     );\r
-       printf("可见卫星颗数(%d),\r\n坐标(%f,%f,%d),\r\nhdop(%d),vdop(%d)\r\n",\r
+       strcat_s(buf,max_buflen,tmpbuf);\r
+       memset_s(tmpbuf,DUMP_BUF_SIZE,0,DUMP_BUF_SIZE);\r
+       sprintf_s(tmpbuf,DUMP_BUF_SIZE,"可见卫星颗数(%d),\n坐标(%f,%f,%d),\nhdop(%d),vdop(%d)\n",\r
        locationdata->num_sats,\r
     locationdata->location.lat,\r
     locationdata->location.lng,\r
@@ -769,24 +786,79 @@ void dump_location_data(gps_data*locationdata)
        locationdata->hdop,\r
        locationdata->vdop\r
     );\r
+       strcat_s(buf,max_buflen,tmpbuf);\r
        if (locationdata->startnum>0)\r
        {\r
-               printf("卫星数[%d]",locationdata->startnum);\r
+               memset_s(tmpbuf,DUMP_BUF_SIZE,0,DUMP_BUF_SIZE);\r
+               sprintf_s(tmpbuf,DUMP_BUF_SIZE,"卫星数[%d](strid,snr)",locationdata->startnum);\r
+               strcat_s(buf,max_buflen,tmpbuf);\r
                for(int i=0;i<20;i++)\r
                {\r
                        if (i< locationdata->startnum)\r
                        {\r
-                               printf(",(%d,%d)",\r
+                               memset_s(tmpbuf,DUMP_BUF_SIZE,0,DUMP_BUF_SIZE);\r
+                               sprintf_s(tmpbuf,DUMP_BUF_SIZE,",(%d,%d)",\r
                                        locationdata->starts[i].starID,\r
                                        locationdata->starts[i].snr);\r
+                               strcat_s(buf,max_buflen,tmpbuf);\r
+                       }\r
+               }\r
+               strcat_s(buf,max_buflen,"\n");\r
+       }else{\r
+               strcat_s(buf,max_buflen,"无卫星数据\n");\r
+       }\r
+#else\r
+       strcat(buf,"\r\n");\r
+       memset(tmpbuf,0,DUMP_BUF_SIZE);\r
+       sprintf(tmpbuf,"20%02d-%02d-%02d,\r\n定位状态(%s)\r\n",\r
+    locationdata->date_time.year,\r
+    locationdata->date_time.month,\r
+    locationdata->date_time.day,\r
+    get_gps_status_str(locationdata->status)\r
+    );\r
+       strcat(buf,tmpbuf);\r
 \r
+       memset(tmpbuf,0,DUMP_BUF_SIZE);\r
+       sprintf(tmpbuf,"可见卫星颗数(%d),\r\n坐标(%f,%f,%d),\r\nhdop(%d),vdop(%d)\r\n",\r
+       locationdata->num_sats,\r
+    locationdata->location.lat,\r
+    locationdata->location.lng,\r
+    locationdata->location.alt,\r
+       locationdata->hdop,\r
+       locationdata->vdop\r
+    );\r
+       strcat(buf,tmpbuf);\r
+       if (locationdata->startnum>0)\r
+       {\r
+               memset(tmpbuf,0,DUMP_BUF_SIZE);\r
+               sprintf(tmpbuf,"卫星数[%d](strid,snr)",locationdata->startnum);\r
+               strcat(buf,tmpbuf);\r
+               for(int i=0;i<20;i++)\r
+               {\r
+                       if (i< locationdata->startnum)\r
+                       {\r
+                               memset(tmpbuf,0,DUMP_BUF_SIZE);\r
+                               sprintf(tmpbuf,",(%d,%d)",\r
+                                       locationdata->starts[i].starID,\r
+                                       locationdata->starts[i].snr);\r
+                               strcat(buf,tmpbuf);\r
                        }\r
                }\r
-               printf("\r\n");\r
+               strcat(buf,"\r\n");\r
        }else{\r
-               printf("无卫星数据\r\n");\r
+               strcat(buf,"无卫星数据\r\n");\r
        }\r
-       printf("\r\n");\r
+       strcat(buf,"\r\n");\r
+#endif\r
+       free(tmpbuf);\r
+}\r
+\r
+void dump_location_data(gps_data_t*locationdata)\r
+{\r
+       char* msgbuf=(char*)malloc(256);\r
+       dump_location_data_to_buf(locationdata,msgbuf,256);\r
+       printf("%s",msgbuf);\r
+       free(msgbuf);\r
 }\r
 \r
 \r
index dbbaec4..d23c2aa 100644 (file)
@@ -71,7 +71,7 @@ int decode_nmea(char c)
     return 0;
 }
 
-int main1(int argc, char** argv)
+int main(int argc, char** argv)
 {
 
     char tmpc=0;
@@ -83,7 +83,7 @@ int main1(int argc, char** argv)
     
 }
 
-int main(int argc, char** argv)
+int main1(int argc, char** argv)
 {
 
     for(int i=0; i<sizeof(nmealines1); ++i)
index 69ae579..962d029 100644 (file)
@@ -30,7 +30,7 @@
 #include "gnss_ctl.h"
 #include "gpio.h"
 #include "uart_gnss.h"
-
+#include "gnss_sample.h"
 
 errcode_t gnss_init(void)
 {
@@ -189,9 +189,10 @@ errcode_t gnss_start(void)
 
 errcode_t gnss_stop(void)
 {
-    uint8_t cmd = GNSS_CMD_STOP;
-    do_gnss_cmd(GNSS_CMD_WRITEDATA, &cmd,1);
-    g_gnss_status = 0;
+    // uint8_t cmd = GNSS_CMD_STOP;
+    // do_gnss_cmd(GNSS_CMD_WRITEDATA, &cmd,1);
+    // g_gnss_status = 0;
+    GnssServerStop();
     return 0;
 
 }
diff --git a/code/sdk/zhihui/services/gnss/src/nmealist.txt b/code/sdk/zhihui/services/gnss/src/nmealist.txt
new file mode 100644 (file)
index 0000000..7d5857b
--- /dev/null
@@ -0,0 +1,56 @@
+$Achilles,H7S1,Q35,F1P26.0,0*72\r
+$Achilles,H7S1,Q35,F1P26.0,0*72\r
+$GPGGA,,,,,,0,,,,,,,,*66\r
+$GPGLL,,,,,,V,N*64\r
+$GPGSA,A,1,,,,,,,,,,,,,,,*1E\r
+$GPRMC,,V,,,,,,,,,E,N,V*6C\r
+$GPVTG,,T,,M,,N,,K,N*2C\r
+$GPZDA,,,,,00,00*48\r
+$PNTH000,13,,-88,0,,,,,1,1*2D\r
+$PNTH001,0.000000,0.00,0.00,300000.00,1,0,0*1D\r
+$PNTH002,,N,0.000000,0,200,0.000000,3,0.000000*51\r
+$GPGGA,,,,,,0,,,,,,,,*66\r
+$GPGLL,,,,,,V,N*64\r
+$GPGSA,A,1,,,,,,,,,,,,,,,*1E\r
+$GPRMC,,V,,,,,,,,,E,N,V*6C\r
+$GPVTG,,T,,M,,N,,K,N*2C\r
+$GPZDA,,,,,00,00*48\r
+$PNTH000,13,,-87,0,,,,,1,1*22\r
+$PNTH001,0.000000,0.00,0.00,300000.00,1,0,0*1D\r
+$PNTH002,,N,0.000000,0,200,0.000000,3,0.000000*51\r
+$GPGGA,,,,,,0,,,,,,,,*66\r
+$GPGLL,,,,,,V,N*64\r
+$GPGSA,A,1,,,,,,,,,,,,,,,*1E\r
+$GPRMC,,V,,,,,,,,,E,N,V*6C\r
+$GPVTG,,T,,M,,N,,K,N*2C\r
+$GPZDA,,,,,00,00*48\r
+$PNTH000,13,,-87,0,,,,,1,1*22\r
+$PNTH001,0.000000,0.00,0.00,300000.00,1,0,0*1D\r
+$PNTH002,,N,0.000000,0,200,0.000000,3,0.000000*51\r
+$GPGGA,,,,,,0,,,,,,,,*66\r
+$GPGLL,,,,,,V,N*64\r
+$GPGSA,A,1,,,,,,,,,,,,,,,*1E\r
+$GPRMC,,V,,,,,,,,,E,N,V*6C\r
+$GPVTG,,T,,M,,N,,K,N*2C\r
+$GPZDA,,,,,00,00*48\r
+$PNTH000,13,,-88,4,,,,,1,1*29\r
+$PNTH001,0.000000,0.00,0.00,300000.00,1,0,0*1D\r
+$PNTH002,,T,0.000000,0,200,0.000000,3,0.000000*4B\r
+$GPGGA,,,,,,0,,,,,,,,*66\r
+$GPGLL,,,,,,V,N*64\r
+$GPGSA,A,1,,,,,,,,,,,,,,,*1E\r
+$GPRMC,,V,,,,,,,,,E,N,V*6C\r
+$GPVTG,,T,,M,,N,,K,N*2C\r
+$GPZDA,,,,,00,00*48\r
+$PNTH000,13,,-88,0,,,,,1,1*2D\r
+$PNTH001,0.000000,0.00,0.00,300000.00,1,0,0*1D\r
+$PNTH002,,T,0.000000,0,200,0.000000,3,0.000000*4B\r
+$GPGGA,,,,,,0,,,,,,,,*66\r
+$GPGLL,,,,,,V,N*64\r
+$GPGSA,A,1,,,,,,,,,,,,,,,*1E\r
+$GPRMC,,V,,,,,,,,,E,N,V*6C\r
+$GPVTG,,T,,M,,N,,K,N*2C\r
+$GPZDA,,,,,00,00*48\r
+$PNTH000,13,,-87,0,,,,,1,1*22\r
+$PNTH001,0.000000,0.00,0.00,300000.00,1,0,0*1D\r
+$PNTH002,,N,0.000000,0,200,0.000000,3,0.000000*51\r
index 1815aed..e69a380 100644 (file)
@@ -192,7 +192,7 @@ static void uart_event_task(void const *arg)
                 break;
                 case GNSS_CMD_START:
                     // gnss_get_start_cmd(&buf,&len);
-                    GnssExecuteSamples();
+                    GnssServerStart();
                     last_cfg_cmd_index = 0xFF; //last_cfg_cmd_index=0xFF 代表cfg结束写入,开始检测其他指令
                 break;
                 case GNSS_CMD_STOP: