添加运动模式切换,消息发送
authorpenglei <1624952103@qq.com>
Tue, 9 Apr 2024 06:08:08 +0000 (14:08 +0800)
committerpenglei <1624952103@qq.com>
Tue, 9 Apr 2024 06:08:08 +0000 (14:08 +0800)
code/sdk/application/wearable/service/broadcast/include/broadcast_feature.h
code/sdk/application/wearable/service/broadcast/src/broadcast_implement.c
code/sdk/application/wearable/service/factorytest_service/factorytest_protocol.c
code/sdk/application/wearable/service/msg_center/src/msg_center_customer.cpp
code/sdk/drivers/peripheral/cywee/CMakeLists.txt
code/sdk/drivers/peripheral/cywee/Inc/cywee_hal.h
code/sdk/drivers/peripheral/cywee/Inc/cywee_service.h
code/sdk/drivers/peripheral/cywee/service/cywee_at_cmd.c
code/sdk/drivers/peripheral/cywee/service/cywee_hal.c [new file with mode: 0644]
code/sdk/drivers/peripheral/cywee/service/cywee_service.c
code/sdk/drivers/peripheral/cywee/src/main_dml.c

index 82d0a9f..0804208 100755 (executable)
@@ -45,6 +45,14 @@ typedef enum {
     TOPIC_EVENT_HFP_FINISHED,
     TOPIC_EVENT_HFP_PHONE_TO_WATCH,
     TOPIC_EVENT_HFP_WATCH_TO_PHONE,
+    TOPIC_EVENT_NORMAL_UPDATE,
+    TOPIC_EVENT_TREADMILL_UPDATE,
+    TOPIC_EVENT_OUTDOOR_RUNNING_UPDATE,
+    TOPIC_EVENT_INDOOR_RUNNING_UPDATE,
+    TOPIC_EVENT_FITNESS_PEDOMETERR_UPDATE,
+    TOPIC_EVENT_FREE_TRAINING_UPDATE,
+    TOPIC_EVENT_AR_ALERT_UPDATE,
+    TOPIC_EVENT_EXTRA_INFO_UPDATE,
 #ifdef SUPPORT_CHARGER_PLUG_DETECTION_NOTIFICATION
     TOPIC_EVENT_CHARGE_PLUG,
     TOPIC_EVENT_CHARGE_UNPLUG,
index 474ffdc..2dc6498 100755 (executable)
@@ -26,6 +26,14 @@ static const TopicToCore topicToCoreArray[] = {
     {TOPIC_EVENT_STEPDATA_UPDATE, A_CORE_MASK, 1},
     {TOPIC_EVENT_SHUTDOWN, A_CORE_MASK, 1},
     {TOPIC_EVENT_HEARTRATE_UPDATA, A_CORE_MASK, 1},
+    {TOPIC_EVENT_NORMAL_UPDATE, A_CORE_MASK, 1},
+    {TOPIC_EVENT_TREADMILL_UPDATE, A_CORE_MASK, 1},
+    {TOPIC_EVENT_OUTDOOR_RUNNING_UPDATE, A_CORE_MASK, 1},
+    {TOPIC_EVENT_INDOOR_RUNNING_UPDATE, A_CORE_MASK, 1},
+    {TOPIC_EVENT_FITNESS_PEDOMETERR_UPDATE, A_CORE_MASK, 1},
+    {TOPIC_EVENT_FREE_TRAINING_UPDATE, A_CORE_MASK, 1},
+    {TOPIC_EVENT_AR_ALERT_UPDATE, A_CORE_MASK, 1},
+    {TOPIC_EVENT_EXTRA_INFO_UPDATE, A_CORE_MASK, 1},
 #ifdef SUPPORT_SPO2_NOTIFICATION
     {TOPIC_EVENT_SPO2_UPDATE, A_CORE_MASK, 1},
     {TOPIC_EVENT_START_HRS_MONITORING, A_CORE_MASK, 1},
index 2b6d802..d3d6a1b 100644 (file)
@@ -491,7 +491,7 @@ void factorytest_protocol_common_decode(uint8_t submode,uint8_t testitem,uint8_t
         case BLE_TEST_CMD_COMMON_SUB_MODE_SYSTEM_VERSION:\r
             if (testitem == 0x02)\r
             {\r
-\r
+                //获取软件版本\r
                 uint8_t buildversion[128]={0};\r
                 uint16_t versionlen = 128;\r
                 ret = uapi_get_buildversion(buildversion,versionlen);\r
@@ -597,7 +597,7 @@ void factorytest_protocol_soft_test_decode(uint8_t submode,uint8_t testitem,uint
                         send_data,\r
                         7);\r
             }\r
-            //获取蓝牙信号强度(未完成)\r
+            //获取蓝牙信号强度\r
             if (testitem == 0x03)\r
             {\r
                 uint8_t send_data = 0x00;\r
@@ -608,7 +608,7 @@ void factorytest_protocol_soft_test_decode(uint8_t submode,uint8_t testitem,uint
                         &send_data,\r
                         1);\r
             }\r
-            //发射功率(未完成)\r
+            //发射功率\r
             if (testitem == 0x05)\r
             {\r
                 uint8_t send_data = 0x00;\r
@@ -1445,7 +1445,7 @@ errcode_t factorytest_protocol_decode(uint8_t *buf, uint16_t event_size)
                 \r
             printf("crc16 0x%04X vs 0x%04X\n",crc16,crc16_2);\r
 \r
-            //if( crc16 == crc16_2) //校验通过,开始正式解析\r
+            if( crc16 == crc16_2) //校验通过,开始正式解析\r
             {\r
                 printf("mode %d\n",header.mode);\r
                 switch(header.mode)\r
index 5c6311f..1133d07 100755 (executable)
@@ -51,6 +51,14 @@ extern "C" {
 const PriorityMapper g_pri_mapper[] = {
     {TOPIC_EVENT_ALARM_RING, PRIORITY_TWO},
     {TOPIC_EVENT_NEXTDAY_UPDATE, PRIORITY_TWO},
+    {TOPIC_EVENT_NORMAL_UPDATE,PRIORITY_TWO},
+    {TOPIC_EVENT_TREADMILL_UPDATE,PRIORITY_TWO},
+    {TOPIC_EVENT_OUTDOOR_RUNNING_UPDATE,PRIORITY_TWO},
+    {TOPIC_EVENT_INDOOR_RUNNING_UPDATE,PRIORITY_TWO},
+    {TOPIC_EVENT_FITNESS_PEDOMETERR_UPDATE,PRIORITY_TWO},
+    {TOPIC_EVENT_FREE_TRAINING_UPDATE,PRIORITY_TWO},
+    {TOPIC_EVENT_AR_ALERT_UPDATE,PRIORITY_TWO},
+    {TOPIC_EVENT_EXTRA_INFO_UPDATE,PRIORITY_TWO},
 #ifdef SUPPORT_CHARGER_PLUG_DETECTION_NOTIFICATION
     {TOPIC_EVENT_CHARGE_PLUG, PRIORITY_TWO},
     {TOPIC_EVENT_CHARGE_UNPLUG, PRIORITY_TWO},
@@ -118,6 +126,14 @@ void MsgCenterSubscribe()
     MsgCenterSubscribeTopic(TOPIC_EVENT_HFP_FINISHED);
     MsgCenterSubscribeTopic(TOPIC_EVENT_HFP_PHONE_TO_WATCH);
     MsgCenterSubscribeTopic(TOPIC_EVENT_HFP_WATCH_TO_PHONE);
+    MsgCenterSubscribeTopic(TOPIC_EVENT_NORMAL_UPDATE);
+    MsgCenterSubscribeTopic(TOPIC_EVENT_TREADMILL_UPDATE);
+    MsgCenterSubscribeTopic(TOPIC_EVENT_OUTDOOR_RUNNING_UPDATE);
+    MsgCenterSubscribeTopic(TOPIC_EVENT_INDOOR_RUNNING_UPDATE);
+    MsgCenterSubscribeTopic(TOPIC_EVENT_FITNESS_PEDOMETERR_UPDATE);
+    MsgCenterSubscribeTopic(TOPIC_EVENT_FREE_TRAINING_UPDATE);
+    MsgCenterSubscribeTopic(TOPIC_EVENT_AR_ALERT_UPDATE);
+    MsgCenterSubscribeTopic(TOPIC_EVENT_EXTRA_INFO_UPDATE);
 #ifdef SUPPORT_CHARGER_PLUG_DETECTION_NOTIFICATION
     MsgCenterSubscribeTopic(TOPIC_EVENT_CHARGE_PLUG);
     MsgCenterSubscribeTopic(TOPIC_EVENT_CHARGE_UNPLUG);
@@ -150,6 +166,7 @@ void MsgCenterSubscribe()
 #endif 
     MsgCenterSubscribeTopic(TOPIC_EVENT_FIND_WATCH);
     MsgCenterSubscribeTopic(TOPIC_EVENT_CANCEL_FIND_WATCH);
+
 }
 
 static OHOS::UIViewGroup* showAlarmNotify(void)
@@ -353,10 +370,58 @@ void MsgCenterNotifyHfpWatchProc(const Topic topic, Request* req)
         NotificationManager::GetInstance()->ShowNotify(showCallingNotify, (uint16_t)topic, true);
     }
 }
+//一般模式
+void MsgCenterNotifyNormalProc(const Topic topic, Request* req)
+{
+    unused(topic);
+    unused(req);
+}
+//跑步机模式
+void MsgCenterNotifyTreadmillProc(const Topic topic, Request* req)
+{
+    unused(topic);
+    unused(req);
+}
+//户外跑步模式
+void MsgCenterNotifyOutdoorRunningProc(const Topic topic, Request* req)
+{
+    unused(topic);
+    unused(req);
+}
+//室内跑步模式
+void MsgCenterNotifyIndoorRunningProc(const Topic topic, Request* req)
+{
+    unused(topic);
+    unused(req);
+}
+//防误触计步
+void MsgCenterNotifyFitnessPedometerProc(const Topic topic, Request* req)
+{
+    unused(topic);
+    unused(req);
+}
+//自由运动模式
+void MsgCenterNotifyFreeTrainingProc(const Topic topic, Request* req)
+{
+    unused(topic);
+    unused(req);
+}
+//长时间动作侦测模式
+void MsgCenterNotifyArAlertProc(const Topic topic, Request* req)
+{
+    unused(topic);
+    unused(req);
+}
+
+void MsgCenterNotifyExtraInfoProc(const Topic topic, Request* req)
+{
+    unused(topic);
+    unused(req);
+}
 #ifdef SUPPORT_SPO2_NOTIFICATION_TEST
 uint32_t md = PPG_SERVICE_CMD_TYPE_DO_PPG_TEST;
 //灰卡测试
-void MsgCenterNotifyCardhProc(const Topic topic, Request* req)
+void MsgCenterNotifyCardProc(const Topic topic, Request* req)
 {
     unused(topic);
     unused(req);
@@ -382,7 +447,7 @@ void MsgCenterNotifyCardhProc(const Topic topic, Request* req)
 
 }
 //漏光测试
-void MsgCenterNotifyleaklighthProc(const Topic topic, Request* req)
+void MsgCenterNotifyleaklightProc(const Topic topic, Request* req)
 {
     unused(topic);
     unused(req);
@@ -763,6 +828,16 @@ static msg_center_notify_table_t g_msg_center_notify_table[] = {
     {TOPIC_EVENT_HFP_WATCH_TO_PHONE, MsgCenterNotifyHfpPhoneProc},
     {TOPIC_EVENT_HFP_WATCH_ACTIVE,   MsgCenterNotifyHfpWatchProc},
     {TOPIC_EVENT_HFP_PHONE_TO_WATCH, MsgCenterNotifyHfpWatchProc},
+    {TOPIC_EVENT_FIND_WATCH,MsgCenterNotifyFindWatchProc},
+    {TOPIC_EVENT_CANCEL_FIND_WATCH,MsgCenterNotifyCanCelFindWatchProc},
+    {TOPIC_EVENT_NORMAL_UPDATE,       MsgCenterNotifyNormalProc},
+    {TOPIC_EVENT_TREADMILL_UPDATE,       MsgCenterNotifyTreadmillProc},
+    {TOPIC_EVENT_OUTDOOR_RUNNING_UPDATE,       MsgCenterNotifyOutdoorRunningProc},
+    {TOPIC_EVENT_INDOOR_RUNNING_UPDATE,       MsgCenterNotifyIndoorRunningProc},
+    {TOPIC_EVENT_FITNESS_PEDOMETERR_UPDATE,       MsgCenterNotifyFitnessPedometerProc},
+    {TOPIC_EVENT_FREE_TRAINING_UPDATE,       MsgCenterNotifyFreeTrainingProc},
+    {TOPIC_EVENT_AR_ALERT_UPDATE,       MsgCenterNotifyArAlertProc},
+    {TOPIC_EVENT_EXTRA_INFO_UPDATE,       MsgCenterNotifyExtraInfoProc},
 #ifdef SUPPORT_CHARGER_PLUG_DETECTION_NOTIFICATION
     {TOPIC_EVENT_CHARGE_PLUG,        MsgCenterNotifyChargePlugProc},
     {TOPIC_EVENT_CHARGE_UNPLUG,      MsgCenterNotifyChargeUnPlugProc},
@@ -776,8 +851,8 @@ static msg_center_notify_table_t g_msg_center_notify_table[] = {
     {TOPIC_EVENT_STOP_HRS_MONITORING,   MsgCenterNotifyStopHRMonitoringProc},
     {TOPIC_EVENT_START_SPO2_MONITORING, MsgCenterNotifyStartSPO2MonitoringProc},
     {TOPIC_EVENT_STOP_SPO2_MONITORING,  MsgCenterNotifyStopSPO2MonitoringProc},
-    {TOPIC_EVENT_GRAYCARD_UPDATA,       MsgCenterNotifyCardhProc},
-    {TOPIC_EVENT_LEAKLIGHT_UPDATA,      MsgCenterNotifyleaklighthProc},
+    {TOPIC_EVENT_GRAYCARD_UPDATA,       MsgCenterNotifyCardProc},
+    {TOPIC_EVENT_LEAKLIGHT_UPDATA,      MsgCenterNotifyleaklightProc},
 #endif
 #ifdef SUPPORT_CAT1_MODEM
     {TOPIC_EVENT_CAT1_INCOMMING,        MsgCenterNotifyCatIncomingCallProc},
@@ -793,8 +868,6 @@ static msg_center_notify_table_t g_msg_center_notify_table[] = {
     {TOPIC_EVENT_DEVICE_UNBIND,   MsgCenterNotifyDeviceUnBindProc},   
     {TOPIC_EVENT_DEVICE_UNBINDING_REQUEST,   MsgCenterNotifyDeviceUnBindingRequestProc},   
 #endif
-    {TOPIC_EVENT_FIND_WATCH,MsgCenterNotifyFindWatchProc},
-    {TOPIC_EVENT_CANCEL_FIND_WATCH,MsgCenterNotifyCanCelFindWatchProc},
 };
 
 static msg_center_notify_table_t *MsgCenterGetNotifyTblCb(uint8_t idx)
index 568a75f..d898a76 100644 (file)
@@ -11,6 +11,7 @@ set(SOURCES ${SOURCES}
     ${CMAKE_CURRENT_SOURCE_DIR}/src/board_yh601s.c
     ${CMAKE_CURRENT_SOURCE_DIR}/service/cywee_service.c
     ${CMAKE_CURRENT_SOURCE_DIR}/service/cywee_at_cmd.c
+    ${CMAKE_CURRENT_SOURCE_DIR}/service/cywee_hal.c
     # ${CMAKE_CURRENT_SOURCE_DIR}/../acc/lis2doc_STdC/examples/lis2doc_read_data_single.c
     # ${CMAKE_CURRENT_SOURCE_DIR}/../acc/lis2doc_STdC/lis2doc_porting.c
 )
index d46b831..cc6647b 100644 (file)
@@ -37,8 +37,8 @@ extern void CWM_OS_restoreData(uint8_t* data, uint32_t len);
 
 #define   SPORT_ACTIVE_MODE_NORMAL             1001               // 一般模式(生活模式)        normal(base)    1001
 #define   SPORT_ACTIVE_MODE_TREADMILL          1002                // 跑步機        treadmill       1002
-#define   SPORT_ACTIVE_MODE_OUTDORR_RUNNING    1003                // 戶外跑步     outdoor running 1003
-#define   SPORT_ACTIVE_MODE_INDOR_RUNNING      1006                // 室內跑步     indoor running  1006
+#define   SPORT_ACTIVE_MODE_OUTDOOR_RUNNING    1003                // 戶外跑步     outdoor running 1003
+#define   SPORT_ACTIVE_MODE_INDOOR_RUNNING      1006                // 室內跑步    indoor running  1006
 #define   SPORT_ACTIVE_MODE_FITNESS_PEDOMETERR 1008                // 防誤觸計步  fitness_pedometer       1008
 #define   SPORT_ACTIVE_MODE_FREE_TRAINING      5001                // 自由運動     FreeTraining    5001
 #define   SPORT_ACTIVE_MODE_AR_ALERT           1001                // 長時間動作偵測    AR alert        1001
@@ -427,10 +427,48 @@ typedef struct
     int mag_axis_setting;// int[2] = mag_axis setting    (0: default, 1-24: axis_mode)
 }input_sensor_config_t;
 
+#pragma pack(1)
+typedef struct 
+{
+    int activity_mode;
+    int calories;
+    int duration;
+    int steps;
+    int distance;
+    int step_frequency;
+    int step_length;
+    int pace;
+    int BMR_calories;
+    int is_pause;
+    int avg_step_freq;
+    int avg_step_len;
+    int avg_pace;
+    int max_step_freq;
+    int max_pace;
+    int ar_alert_type;
+}cywee_result_t;
+#pragma pack()
+typedef enum{
+    CYWEE_MSG_TYPE_NORMAL_UPDATE,
+    CYWEE_MSG_TYPE_TREADMILL_UPDATE,
+    CYWEE_MSG_TYPE_OUTDOOR_RUNNING_UPDATE,
+    CYWEE_MSG_TYPE_INDOOR_RUNNING_UPDATE,
+    CYWEE_MSG_TYPE_FITNESS_PEDOMETERR_UPDATE,
+    CYWEE_MSG_TYPE_FREE_TRAINING_UPDATE,
+    CYWEE_MSG_TYPE_AR_ALERT_UPDATE,
+    CYWEE_MSG_TYPE_EXTRA_INFO_UPDATE,
+} cywee_msg_type_t;
+
 
 extern void get_gsonsen_xyz(gsenson_t *t);
 void gsensor_get_n_data(uint8_t cnt,gsenson_t t[]);
 
+typedef void (*cywee_msg_callback_t)(uint8_t msg_type, uint8_t *msg_data, int32_t msg_datalen);
+uint32_t cywee_register_msg_callback(cywee_msg_callback_t func);
+cywee_msg_callback_t cywee_get_send_msg_callback_func(void);
+
+void activity_setstatus(int cmd);
+void activity_exit(void);
 
 #pragma pack()
 
@@ -449,9 +487,10 @@ void gsensor_get_n_data(uint8_t cnt,gsenson_t t[]);
 
 
 
-int cywee_main_dml(void);
+int cywee_main_dml(int cmd);
 void cywee_int_handler(void);
 
+void watch_hand_updown(int fdata);
 
 
 #ifdef __cplusplus
index 7771f91..767a405 100644 (file)
@@ -1,3 +1,13 @@
+/*
+ * @Author: penglei 1624952103@qq.com
+ * @Date: 2024-03-26 20:29:58
+ * @LastEditors: penglei 1624952103@qq.com
+ * @LastEditTime: 2024-04-09 09:18:51
+ * @FilePath: /FD230/code/sdk/drivers/peripheral/cywee/Inc/cywee_service.h
+ * @Description: 
+ * 
+ * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved. 
+ */
 /**
  * Copyright (c) @CompanyNameMagicTag 2022-2022. All rights reserved. \n
  *
@@ -17,14 +27,38 @@ extern "C" {
 #include "stdint.h"
 #include "errcode.h"
 
+// #define CYWEE_SERVICE_CMD_TYPE_DO_PPG_40TIMER_CALLBACK 0x0A
+// #define PPG_SERVICE_CMD_TYPE_DO_PPG_320TIMER_CALLBACK 0x10
+// #define PPG_SERVICE_CMD_TYPE_DO_PPG_TEST 0x11
+// #define PPG_SERVICE_CMD_TYPE_DO_HRV_TEST 0x12
+// #define PPG_SERVICE_CMD_TYPE_DO_SPO2_TEST 0x13
+// #define PPG_SERVICE_CMD_TYPE_DO_LEAKLIGHT_TEST 0x14
+// #define PPG_SERVICE_CMD_TYPE_DO_GRAYCARD_TEST 0x15
+// #define PPG_SERVICE_CMD_TYPE_STOP_PPG_TEST 0x1E
+// #define PPG_SERVICE_CMD_TYPE_STOP_SPO2_TEST 0x1F
+
 
 #define CYWEE_SERVICE_CMD_TIMER_CHECK 0x11
 #define CYWEE_SERVICE_CMD_START_CHECK 0x12
 #define CYWEE_SERVICE_CMD_STOP_CHECK 0x13
 #define CYWEE_SERVICE_CMD_TEST 0x14
 
+#define CYWEE_SERVICE_CMD_NORMAL_MODE 0x15
+#define CYWEE_SERVICE_CMD_TREADMILL_MODE 0x16
+#define CYWEE_SERVICE_CMD_OUTDOOR_RUNNING_MODE 0x17
+#define CYWEE_SERVICE_CMD_INDOOR_RUNNING_MODE 0x18
+#define CYWEE_SERVICE_CMD_FITNESS_PEDOMETER_MODE 0x19
+#define CYWEE_SERVICE_CMD_FREE_TRAINING_MODE 0x20
+#define CYWEE_SERVICE_CMD_AR_ALERT_MODE 0x21
+
+#define CYWEE_SERVICE_CMD_PAUSE 0x22
+#define CYWEE_SERVICE_CMD_RESUME 0x23
+
+#define CYWEE_SERVICE_CMD_EXIT 0x24
+
 errcode_t uapi_cywee_service_init(void);
 void uapi_cywee_service_deinit(void);
+
 /**
  * 测试指令 参数cmd 选项: ACC_SERVICE_CMD_START_CHECK,ACC_SERVICE_CMD_STOP_CHECK
 */
index b53a177..2f8e576 100644 (file)
@@ -65,12 +65,44 @@ static uint32_t cywee_do_test(uint8_t *para, uint32_t paraLen, char *strCommonCm
     } else if (strcmp(mode, "test") == 0) {
         PRINT("cywee test\n");
         do_cywee_service_check_msg(CYWEE_SERVICE_CMD_TEST);
-    } 
+    } else if (strcmp(mode, "normal") == 0) {
+        PRINT("cywee normal mode\n");
+        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_NORMAL_MODE);
+    } else if (strcmp(mode, "treadmill") == 0) {
+        PRINT("cywee treadmill mode\n");
+        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_TREADMILL_MODE);
+    } else if (strcmp(mode, "outdoor") == 0) {
+        PRINT("cywee outdoor running mode\n");
+        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_OUTDOOR_RUNNING_MODE);
+    } else if (strcmp(mode, "indoor") == 0) {
+        PRINT("cywee indoor running mode\n");
+        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_INDOOR_RUNNING_MODE);
+    } else if (strcmp(mode, "pedometer") == 0) {
+        PRINT("cywee fitness pedometer mode\n");
+        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_FITNESS_PEDOMETER_MODE);
+    } else if (strcmp(mode, "free") == 0) {
+        PRINT("cywee free training mode\n");
+        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_FREE_TRAINING_MODE);
+    } else if (strcmp(mode, "pause") == 0) {
+        PRINT("cywee pause\n");
+        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_PAUSE);
+    } else if (strcmp(mode, "resume") == 0) {
+        PRINT("cywee resume\n");
+        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_RESUME);
+    } else if (strcmp(mode, "exit") == 0) {
+        PRINT("cywee exit\n");
+        do_cywee_service_check_msg(CYWEE_SERVICE_CMD_EXIT);
+    }
     return ERRCODE_SUCC;
 }
 
 static const at_cmd_table_t g_cywee_cmd[] = {
     { (char *)"AT^CYWEETEST",      cywee_do_test, (char *)"test" },
+    { (char *)"AT^CYWEETEST",      cywee_do_test, (char *)"normal" },
+    { (char *)"AT^CYWEETEST",      cywee_do_test, (char *)"free" },
+    { (char *)"AT^CYWEETEST",      cywee_do_test, (char *)"pause" },
+    { (char *)"AT^CYWEETEST",      cywee_do_test, (char *)"resume" },
+    { (char *)"AT^CYWEETEST",      cywee_do_test, (char *)"exit" },
 };
 
 at_cmd_table_t *get_cywee_cmd_table(uint32_t *cmd_count)
diff --git a/code/sdk/drivers/peripheral/cywee/service/cywee_hal.c b/code/sdk/drivers/peripheral/cywee/service/cywee_hal.c
new file mode 100644 (file)
index 0000000..0898893
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * @Author: penglei 1624952103@qq.com
+ * @Date: 2024-04-08 14:53:31
+ * @LastEditors: penglei 1624952103@qq.com
+ * @LastEditTime: 2024-04-08 17:53:40
+ * @FilePath: /FD230/code/sdk/drivers/peripheral/cywee/service/cywee_hal.c
+ * @Description: 
+ * 
+ * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved. 
+ */
+
+#include <stdio.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#include "cywee_hal.h"
+
+cywee_msg_callback_t g_cywee_send_msg_toUI = NULL;
+
+uint32_t cywee_register_msg_callback(cywee_msg_callback_t cywee_func)
+{
+    g_cywee_send_msg_toUI = cywee_func;
+    return 0;
+}
+
+cywee_msg_callback_t cywee_get_send_msg_callback_func(void)
+{
+    return g_cywee_send_msg_toUI;
+}
+
+
index 9d04d11..2eb18f0 100644 (file)
@@ -6,7 +6,6 @@
  * History: \n
  * 2022-08-16, Create file. \n
  */
-
 #include "pinctrl.h"
 #include "debug_print.h"
 #include "soc_osal.h"
 #include "los_printf.h"
 
 #include "custom_utils.h"
+#include "cywee_hal.h"
+
+#include "broadcast_service.h"
+#include "broadcast_feature.h"
+
+#include "ppg_service.h"
+
+
 typedef struct 
 {
     uint8_t cmd;
@@ -50,6 +57,87 @@ static unsigned long g_cywee_queue;
 static bool cywee_service_running_stat = false;
 static void cywee_service_check_timer_callback(void* data);
 
+void cywee_msg_callback(uint8_t msg_type, uint8_t *msg_data, int32_t msg_datalen)
+{
+    PRINT("cywee_msg_callback\r\n");
+    cywee_result_t c_result_t;
+    memcpy(&c_result_t, msg_data, sizeof(cywee_result_t));
+    switch(msg_type)
+    {
+        //一般模式
+        case CYWEE_MSG_TYPE_NORMAL_UPDATE:
+            PRINT("CYWEE_MSG_TYPE_NORMAL_UPDATE");
+            PRINT("activit_mode[%d], steps[%d], distance[%d], calories[%d], step frequency[%d], step length[%d], pace[%d], BMR calories[%d], is_pause[%d],len[%d]\n",
+            c_result_t.activity_mode,c_result_t.steps,c_result_t.distance,c_result_t.calories,c_result_t.step_frequency,
+            c_result_t.step_length,c_result_t.pace,c_result_t.BMR_calories,c_result_t.is_pause,sizeof(c_result_t));
+            CustomEventPublish(TOPIC_EVENT_NORMAL_UPDATE,&c_result_t,sizeof(c_result_t));
+            break;
+
+        //跑步机模式
+        case CYWEE_MSG_TYPE_TREADMILL_UPDATE:
+            PRINT("CYWEE_MSG_TYPE_TREADMILL_UPDATE");
+            PRINT("activit_mode[%d], steps[%d], distance[%d], calories[%d], step frequency[%d], step length[%d], pace[%d], BMR calories[%d], is_pause[%d],len[%d]\n",
+            c_result_t.activity_mode,c_result_t.steps,c_result_t.distance,c_result_t.calories,c_result_t.step_frequency,
+            c_result_t.step_length,c_result_t.pace,c_result_t.BMR_calories,c_result_t.is_pause,sizeof(c_result_t));
+            CustomEventPublish(TOPIC_EVENT_TREADMILL_UPDATE,&c_result_t,sizeof(c_result_t));
+            break;
+
+        //户外跑步模式
+        case CYWEE_MSG_TYPE_OUTDOOR_RUNNING_UPDATE:
+            PRINT("CYWEE_MSG_TYPE_OUTDOOR_RUNNING_UPDATE");
+            PRINT("activit_mode[%d], steps[%d], distance[%d], calories[%d], step frequency[%d], step length[%d], pace[%d], BMR calories[%d], is_pause[%d],len[%d]\n",
+            c_result_t.activity_mode,c_result_t.steps,c_result_t.distance,c_result_t.calories,c_result_t.step_frequency,
+            c_result_t.step_length,c_result_t.pace,c_result_t.BMR_calories,c_result_t.is_pause,sizeof(c_result_t));
+            CustomEventPublish(TOPIC_EVENT_OUTDOOR_RUNNING_UPDATE,&c_result_t,sizeof(c_result_t));
+            break;
+
+        //室内跑步模式
+        case CYWEE_MSG_TYPE_INDOOR_RUNNING_UPDATE:
+            PRINT("CYWEE_MSG_TYPE_INDOOR_RUNNING_UPDATE");
+            PRINT("activit_mode[%d], steps[%d], distance[%d], calories[%d], step frequency[%d], step length[%d], pace[%d], BMR calories[%d], is_pause[%d],len[%d]\n",
+            c_result_t.activity_mode,c_result_t.steps,c_result_t.distance,c_result_t.calories,c_result_t.step_frequency,
+            c_result_t.step_length,c_result_t.pace,c_result_t.BMR_calories,c_result_t.is_pause,sizeof(c_result_t));
+            CustomEventPublish(TOPIC_EVENT_INDOOR_RUNNING_UPDATE,&c_result_t,sizeof(c_result_t));
+            break;
+
+        //防误触计步模式
+        case CYWEE_MSG_TYPE_FITNESS_PEDOMETERR_UPDATE:
+            PRINT("CYWEE_MSG_TYPE_FITNESS_PEDOMETERR_UPDATE");
+            PRINT("activit_mode[%d], steps[%d], distance[%d], calories[%d], step frequency[%d], step length[%d], pace[%d], BMR calories[%d], is_pause[%d],len[%d]\n",
+            c_result_t.activity_mode,c_result_t.steps,c_result_t.distance,c_result_t.calories,c_result_t.step_frequency,
+            c_result_t.step_length,c_result_t.pace,c_result_t.BMR_calories,c_result_t.is_pause,sizeof(c_result_t));
+            CustomEventPublish(TOPIC_EVENT_FITNESS_PEDOMETERR_UPDATE,&c_result_t,sizeof(c_result_t));
+            break;
+
+        //自由运动模式
+        case CYWEE_MSG_TYPE_FREE_TRAINING_UPDATE:
+            PRINT("CYWEE_MSG_TYPE_FREE_TRAINING_UPDATE");
+            PRINT("activit_mode[%d], calories[%d], duration[%d],len[%d]\n",
+            c_result_t.activity_mode,c_result_t.calories,c_result_t.duration,sizeof(c_result_t));
+            CustomEventPublish(TOPIC_EVENT_FREE_TRAINING_UPDATE,&c_result_t,sizeof(c_result_t));
+            break;
+
+        //长时间动作侦测模式
+        case CYWEE_MSG_TYPE_AR_ALERT_UPDATE:
+            PRINT("CYWEE_MSG_TYPE_AR_ALERT_UPDATE");
+            PRINT("activit_mode[%d], ar alert type[%d], len[%d]\n",
+            c_result_t.activity_mode,c_result_t.ar_alert_type,sizeof(c_result_t));
+            CustomEventPublish(TOPIC_EVENT_AR_ALERT_UPDATE,&c_result_t,sizeof(c_result_t));
+            break;
+
+        //额外信息
+        case CYWEE_MSG_TYPE_EXTRA_INFO_UPDATE:
+            PRINT("CYWEE_MSG_TYPE_EXTRA_INFO_UPDATE");
+            PRINT("average step frequency[%d], average step length[%d], average pace[%d], max step frequency[%d], max pace[%d]\n",
+            c_result_t.avg_step_freq,c_result_t.avg_step_len,c_result_t.avg_pace,c_result_t.max_step_freq,c_result_t.max_pace,sizeof(c_result_t));
+            CustomEventPublish(TOPIC_EVENT_EXTRA_INFO_UPDATE,&c_result_t,sizeof(c_result_t));
+            break;
+        default:
+            PRINT("Unknown sensor message type");
+            break;
+    }
+}
+
 static void cywee_service_timer_start_check(uint32_t rtc_ms)
 {
     
@@ -119,13 +207,54 @@ static void cywee_service_check_task(void const *arg)
             test_api();
         }else if (mail.cmd == CYWEE_SERVICE_CMD_START_CHECK){
             cywee_service_running_stat = true;
-            cywee_main_dml();
+            cywee_main_dml(SPORT_ACTIVE_MODE_NORMAL);
             cywee_service_timer_start_check(CYWEE_CHECK_MS);
         }else if (mail.cmd == CYWEE_SERVICE_CMD_STOP_CHECK){
             cywee_service_running_stat = false;
             if (g_cywee_service_timer != NULL) osTimerStop(g_cywee_service_timer);
-            
+            activity_exit();
+        }
+        
+        else if (mail.cmd == CYWEE_SERVICE_CMD_NORMAL_MODE){
+            cywee_service_running_stat = true;
+            cywee_main_dml(SPORT_ACTIVE_MODE_NORMAL);
+            cywee_service_timer_start_check(CYWEE_CHECK_MS);
+        }else if(mail.cmd == CYWEE_SERVICE_CMD_TREADMILL_MODE){
+            cywee_service_running_stat = true;
+            cywee_main_dml(SPORT_ACTIVE_MODE_TREADMILL);
+            cywee_service_timer_start_check(CYWEE_CHECK_MS);
+        }else if(mail.cmd == CYWEE_SERVICE_CMD_OUTDOOR_RUNNING_MODE){
+            cywee_service_running_stat = true;
+            cywee_main_dml(SPORT_ACTIVE_MODE_OUTDOOR_RUNNING);
+            cywee_service_timer_start_check(CYWEE_CHECK_MS);
+        }else if(mail.cmd == CYWEE_SERVICE_CMD_INDOOR_RUNNING_MODE){
+            cywee_service_running_stat = true;
+            cywee_main_dml(SPORT_ACTIVE_MODE_INDOOR_RUNNING);
+            cywee_service_timer_start_check(CYWEE_CHECK_MS);
+        }else if(mail.cmd == CYWEE_SERVICE_CMD_FITNESS_PEDOMETER_MODE){
+            cywee_service_running_stat = true;
+            cywee_main_dml(SPORT_ACTIVE_MODE_FITNESS_PEDOMETERR);
+            cywee_service_timer_start_check(CYWEE_CHECK_MS);
+        }else if(mail.cmd == CYWEE_SERVICE_CMD_FREE_TRAINING_MODE){
+            cywee_service_running_stat = true;
+            cywee_main_dml(SPORT_ACTIVE_MODE_FREE_TRAINING);
+            cywee_service_timer_start_check(CYWEE_CHECK_MS);
+        }else if(mail.cmd == CYWEE_SERVICE_CMD_AR_ALERT_MODE){
+            cywee_service_running_stat = true;
+            cywee_main_dml(SPORT_ACTIVE_MODE_AR_ALERT);
+            cywee_service_timer_start_check(CYWEE_CHECK_MS);
+        }else if(mail.cmd == CYWEE_SERVICE_CMD_PAUSE){
+            activity_setstatus(1);
+        }else if(mail.cmd == CYWEE_SERVICE_CMD_RESUME){
+            activity_setstatus(0);
+        }else if(mail.cmd == CYWEE_SERVICE_CMD_EXIT){
+            activity_exit();
+            osTimerStop(g_cywee_service_timer);
         }
+
+        #define CYWEE_SERVICE_CMD_PAUSE 0x22
+#define CYWEE_SERVICE_CMD_RESUME 0x23
+
     }
 }
 #define CYWEE_APP_BOARD_MSG_COUNT 50
@@ -159,11 +288,22 @@ errcode_t uapi_cywee_service_init(void)
 
     g_cywee_service_timer = osTimerNew((osTimerFunc_t)cywee_service_check_timer_callback, osTimerPeriodic, NULL, NULL);
   
-    do_cywee_service_check_msg(CYWEE_SERVICE_CMD_START_CHECK);
+    cywee_register_msg_callback(cywee_msg_callback);
+    //do_cywee_service_check_msg(CYWEE_SERVICE_CMD_START_CHECK);
     
     return ERRCODE_SUCC;
 }
 
+// void cywee_service_service_resume(void)
+// {
+//     PRINT("cywee_service_service resume!\r\n");
+//     cywee_service_check_timer_callback(0);
+// }
+// void cywee_service_service_suspend(void)
+// {
+//     PRINT("cywee_service_service suspend!\r\n");
+// }
+
 // void cywee_service_service_resume(void)
 // {
 //     PRINT("cywee_service_service resume!\r\n");
index 29df884..6b53f68 100644 (file)
@@ -6,11 +6,12 @@
 #include <cwm_lib_dml.h>
 #include "cywee_hal.h"
 #include "power_display_service.h"
-#include "ppg_service.h"
 #include "broadcast_feature.h"
 #include "cmsis_os2.h"
 #include "osal_msgqueue.h"
 #include "osal_mutex.h" 
+#include "ppg_service.h"
+
 #define AP_ENABLE_DML_SDO_LISTEN
 
 int16_t gsensor_x[24] = {0};
@@ -18,29 +19,124 @@ int16_t gsensor_y[24] = {0};
 int16_t gsensor_z[24] = {0};
 #define GSENSON_MSG_COUNT   16
 
-osal_mutex mutex_gsenson_queue;
-osal_mutex mutex_gsensor_queue_ext;
-static unsigned long gsenson_queue;
+static gsenson_t gxyz_t;
+static uint8_t gsenson_falg=0;
+
+static uint16 num_falg=0;
+static gsenson_t gxyz_t_queue[16]={0};
+static int16 left_falg=0;
+static int16 right_falg=-1;
+
+SettingControl_t scl;
 
+cywee_result_t c_result_t;
 
-void uapi_GSENSON_create_queue(void)
+static int cywee_installized = 0 ;
+
+void watch_hand_updown(int fdata)
 {
-    if ( (osal_msg_queue_create("gsensor_queue", GSENSON_MSG_COUNT, &gsenson_queue,0, sizeof(gsenson_t)) )!= ERRCODE_SUCC)
-     {
-        CWM_OS_dbgPrintf("gsensor_queue create  fail\r\n");   
+    #if defined(SUPPORT_POWER_MANAGER)
+    const power_display_svr_api_t *display_api = power_display_svr_get_api();
+    #endif
+    if (fdata == 2)
+    {
+    #if defined(SUPPORT_POWER_MANAGER)
+        display_api->set_screen_set_keepon_timeout(0);
+        CWM_OS_dbgPrintf("[cwyee] turn_off_screen");
+    #endif
+    }else if (fdata == 1)
+    {
+    #if defined(SUPPORT_POWER_MANAGER)
+        if (display_api->get_screen_state() != SCREEN_ON) {
+            CWM_OS_dbgPrintf("[cwyee] turn_on_screen");
+            display_api->turn_on_screen();
+        }
+        display_api->set_screen_set_keepon_timeout(5000);
+    #endif
     }
+}
 
-    osal_mutex_init(&mutex_gsenson_queue);
+//0:resume , 1:pause
+void activity_setstatus(int cmd)
+{
+    memset(&scl, 0, sizeof(scl));
+    scl.iData[0] = 1;
+    scl.iData[1] = cmd; 
+    CWM_SettingControl(SCL_ACTIVITY_PAUSE, &scl);
 }
 
-static gsenson_t gxyz_t;
-static uint8_t gsenson_falg=0;
+void activity_exit(void)
+{
+    memset(&scl, 0, sizeof(scl));
+    scl.iData[0] = 1;
+    CWM_SettingControl(SCL_REQ_ACTIVITY_EXIT, &scl);
+    cywee_installized = 0;
+}
 
-static uint16 num_falg=0;
-static gsenson_t gxyz_t_queue[16]={0};
-static int16 left_falg=0;
-static int16 right_falg=-1;
+void cyw_mode_init(int mode)
+{
+    switch (mode)
+    {
+        //一般模式(生活模式)
+        case SPORT_ACTIVE_MODE_NORMAL:
+            memset(&scl, 0, sizeof(scl));
+            scl.iData[0] = 1;
+            scl.iData[1] = SPORT_ACTIVE_MODE_NORMAL;
+            CWM_SettingControl(SCL_SET_ACTIVITY_MODE, &scl);
+            // CWM_SettingControl(SCL_SET_INACTIVITY_MODE, &scl);
+            //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__);
+
+            break;
+
+        //跑步机
+        case SPORT_ACTIVE_MODE_TREADMILL:
+            memset(&scl, 0, sizeof(scl));
+            scl.iData[0] = 1;
+            scl.iData[1] = SPORT_ACTIVE_MODE_TREADMILL;
+            CWM_SettingControl(SCL_SET_ACTIVITY_MODE, &scl);
+
+            break;
+
+        //户外跑步
+        case SPORT_ACTIVE_MODE_OUTDOOR_RUNNING:
+            memset(&scl, 0, sizeof(scl));
+            scl.iData[0] = 1;
+            scl.iData[1] = SPORT_ACTIVE_MODE_OUTDOOR_RUNNING;
+            CWM_SettingControl(SCL_SET_ACTIVITY_MODE, &scl);
+            break;
+
+        //室内跑步
+        case SPORT_ACTIVE_MODE_INDOOR_RUNNING:
+            memset(&scl, 0, sizeof(scl));
+            scl.iData[0] = 1;
+            scl.iData[1] = SPORT_ACTIVE_MODE_INDOOR_RUNNING;
+            CWM_SettingControl(SCL_SET_ACTIVITY_MODE, &scl);
+            break;
+
+        //防误触计步
+        case SPORT_ACTIVE_MODE_FITNESS_PEDOMETERR:
+            memset(&scl, 0, sizeof(scl));
+            scl.iData[0] = 1;
+            scl.iData[1] = SPORT_ACTIVE_MODE_FITNESS_PEDOMETERR;
+            CWM_SettingControl(SCL_SET_ACTIVITY_MODE, &scl);
+            break;
+
+        //自由运动
+        case SPORT_ACTIVE_MODE_FREE_TRAINING:
+            memset(&scl, 0, sizeof(scl));
+            scl.iData[0] = 1;
+            scl.iData[1] = SPORT_ACTIVE_MODE_FREE_TRAINING;
+            CWM_SettingControl(SCL_SET_ACTIVITY_MODE, &scl);
+            break;
 
+        //长时间动作侦测
+        // case SPORT_ACTIVE_MODE_AR_ALERT:
+        //     break;
+        
+        default:
+            break;
+    }
+}
 
 void get_gsonsen_xyz(gsenson_t *t)
 {
@@ -80,8 +176,12 @@ void gsensor_get_n_data(uint8_t cnt,gsenson_t t[])
     }
 
 }
+
 //static int flag=32;
 void CWM_AP_SensorListen(pSensorEVT_t sensorEVT) {
+
+    cywee_msg_callback_t cywee_func;
+
     switch (sensorEVT->sensorType) {
         case IDX_ACCEL:
 
@@ -141,26 +241,9 @@ void CWM_AP_SensorListen(pSensorEVT_t sensorEVT) {
              break;
         case IDX_ALGO_WATCH_HANDUP:
             CWM_OS_dbgPrintf("HANDUP_DOWN MSG [%d]\n",(int)sensorEVT->fData[1]);
-            #if defined(SUPPORT_POWER_MANAGER)
-            const power_display_svr_api_t *display_api = power_display_svr_get_api();
-            #endif
-            if ((int)sensorEVT->fData[1] == 2)
-            {
-            #if defined(SUPPORT_POWER_MANAGER)
-                display_api->set_screen_set_keepon_timeout(0);
-                CWM_OS_dbgPrintf("[cwyee] turn_off_screen");
-            #endif
-            }else if ((int)sensorEVT->fData[1] == 1)
-            {
-            #if defined(SUPPORT_POWER_MANAGER)
-                if (display_api->get_screen_state() != SCREEN_ON) {
-                    CWM_OS_dbgPrintf("[cwyee] turn_on_screen");
-                    display_api->turn_on_screen();
-                }
-                display_api->set_screen_set_keepon_timeout(5000);
-            #endif
-            }
-             break;
+            watch_hand_updown((int)sensorEVT->fData[1]);
+
+            break;
         case IDX_ALGO_SLEEP:
             CWM_OS_dbgPrintf("IDX_ALGO_SLEEP\n");
              break;
@@ -195,12 +278,45 @@ void CWM_AP_SensorListen(pSensorEVT_t sensorEVT) {
         case IDX_ALGO_ACTIVITY_OUTPUT:
             if((int)sensorEVT->fData[0] == 100)
             {
-                 CWM_OS_dbgPrintf("average step frequency[%d], average step length[%d], average pace[%d], max step frequency[%d], max pace[%d]\n",
+                CWM_OS_dbgPrintf("average step frequency[%d], average step length[%d], average pace[%d], max step frequency[%d], max pace[%d]\n",
                                 (int)sensorEVT->fData[1],
                                 (int)sensorEVT->fData[2],
                                 (int)sensorEVT->fData[3],
                                 (int)sensorEVT->fData[4],
                                 (int)sensorEVT->fData[5]);
+
+                memset(&c_result_t,0,sizeof(cywee_result_t));
+                c_result_t.avg_step_freq = (int)sensorEVT->fData[1];
+                c_result_t.avg_step_len = (int)sensorEVT->fData[2];
+                c_result_t.avg_pace = (int)sensorEVT->fData[3];
+                c_result_t.max_step_freq = (int)sensorEVT->fData[4];
+                c_result_t.max_pace = (int)sensorEVT->fData[5];
+                cywee_func = cywee_get_send_msg_callback_func();
+                cywee_func(CYWEE_MSG_TYPE_EXTRA_INFO_UPDATE,&c_result_t,sizeof(cywee_result_t));
+
+            }else if((int)sensorEVT->fData[0] == 5001)
+            {
+                CWM_OS_dbgPrintf("Free_Training : calories[%d], duration[%d]\n",
+                                (int)sensorEVT->fData[1],
+                                (int)sensorEVT->fData[5]);
+
+                memset(&c_result_t,0,sizeof(cywee_result_t));
+                c_result_t.activity_mode = (int)sensorEVT->fData[0];
+                c_result_t.calories = (int)sensorEVT->fData[1];
+                c_result_t.duration = (int)sensorEVT->fData[5];
+                cywee_func = cywee_get_send_msg_callback_func();
+                cywee_func(CYWEE_MSG_TYPE_FREE_TRAINING_UPDATE,&c_result_t,sizeof(cywee_result_t));
+                
+            }else if((int)sensorEVT->fData[0] == 102)
+            {
+                CWM_OS_dbgPrintf("ar alert type : %d\n",(int)sensorEVT->fData[1]);
+
+                memset(&c_result_t,0,sizeof(cywee_result_t));
+                c_result_t.activity_mode = (int)sensorEVT->fData[0];
+                c_result_t.ar_alert_type = (int)sensorEVT->fData[1];
+                cywee_func = cywee_get_send_msg_callback_func();
+                cywee_func(CYWEE_MSG_TYPE_AR_ALERT_UPDATE,&c_result_t,sizeof(cywee_result_t));
+                
             }else{
                  CWM_OS_dbgPrintf("activity_mode[%d], steps[%d], distance[%d], calories[%d], step frequency[%d], step length[%d], pace[%d], BMR calories[%d], is_pause[%d]\n",
                                 (int)sensorEVT->fData[0],
@@ -213,6 +329,44 @@ void CWM_AP_SensorListen(pSensorEVT_t sensorEVT) {
                                 (int)sensorEVT->fData[8],
                                 (int)sensorEVT->fData[14]);
                 int stepcount = (int)sensorEVT->fData[1];
+                memset(&c_result_t,0,sizeof(cywee_result_t));
+                c_result_t.activity_mode = (int)sensorEVT->fData[0];
+                c_result_t.steps = (int)sensorEVT->fData[1];
+                c_result_t.distance = (int)sensorEVT->fData[2];
+                c_result_t.calories = (int)sensorEVT->fData[3];
+                c_result_t.step_frequency = (int)sensorEVT->fData[5];
+                c_result_t.step_length = (int)sensorEVT->fData[6];
+                c_result_t.pace = (int)sensorEVT->fData[7];
+                c_result_t.BMR_calories = (int)sensorEVT->fData[8];
+                c_result_t.is_pause = (int)sensorEVT->fData[14];
+                cywee_func = cywee_get_send_msg_callback_func();
+
+                switch ((int)sensorEVT->fData[0])
+                {
+                    case SPORT_ACTIVE_MODE_NORMAL:
+                        cywee_func(CYWEE_MSG_TYPE_NORMAL_UPDATE,&c_result_t,sizeof(cywee_result_t));
+                        break;
+
+                    case SPORT_ACTIVE_MODE_TREADMILL:
+                        cywee_func(CYWEE_MSG_TYPE_TREADMILL_UPDATE,&c_result_t,sizeof(cywee_result_t));
+                        break;
+
+                    case SPORT_ACTIVE_MODE_OUTDOOR_RUNNING:
+                        cywee_func(CYWEE_MSG_TYPE_OUTDOOR_RUNNING_UPDATE,&c_result_t,sizeof(cywee_result_t));
+                        break;
+
+                    case SPORT_ACTIVE_MODE_INDOOR_RUNNING:
+                        cywee_func(CYWEE_MSG_TYPE_INDOOR_RUNNING_UPDATE,&c_result_t,sizeof(cywee_result_t));
+                        break;
+
+                    case SPORT_ACTIVE_MODE_FITNESS_PEDOMETERR:
+                        cywee_func(CYWEE_MSG_TYPE_FITNESS_PEDOMETERR_UPDATE,&c_result_t,sizeof(cywee_result_t));
+                        break;
+                    
+                    default:
+                        break;
+                }
+
                 CustomEventPublish(TOPIC_EVENT_STEPDATA_UPDATE,&stepcount,sizeof(int)); 
             }
            
@@ -285,9 +439,9 @@ void CWM_AP_dmlSensorDataOutput_listen(const dml_sensorData_t * pSdo) {
         CWM_OS_dbgPrintf("==acc: x=%.3f, y=%.3f, z=%.3f\n", pSdo->acc_data[0], pSdo->acc_data[1], pSdo->acc_data[2]);
 }
 #endif
-static int cywee_installized = 0 ;
 
-int cywee_main_dml(void) {
+
+int cywee_main_dml(int cmd) {
 
     if (cywee_installized==1)
     {
@@ -297,7 +451,6 @@ int cywee_main_dml(void) {
     }
     cywee_installized = 1;
     int i;
-    SettingControl_t scl;
     memset(&scl, 0, sizeof(scl));
     scl.iData[0] = 1;
     CWM_SettingControl(SCL_GET_LIB_INFO, &scl);
@@ -348,8 +501,6 @@ int cywee_main_dml(void) {
     CWM_SettingControl(SCL_CHIP_VENDOR_CONFIG, &scl);
     //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__);
 
-    uapi_GSENSON_create_queue();
-
     CWM_LibPostInit(CWM_AP_SensorListen);
     //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__);
 
@@ -393,6 +544,7 @@ int cywee_main_dml(void) {
     scl.iData[1] = 18; //00000000000000000000000000010010  高位在前
     // CWM_SettingControl(SCL_DML_DEBUG, &scl);
 
+    //设置acc gyro 相关参数
     memset(&scl, 0, sizeof(scl));
     scl.iData[0] = 1;
     scl.iData[3] = 2;
@@ -403,7 +555,7 @@ int cywee_main_dml(void) {
     CWM_SettingControl(SCL_DML_DRV_AG_CONFIG, &scl);
     //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__);
 
-
+    //设定搜寻哪种型号的传感器,以及要搜寻的属性
     memset(&scl, 0, sizeof(scl));
     scl.iData[0] = 1;
     scl.iData[1] = 2;
@@ -412,12 +564,14 @@ int cywee_main_dml(void) {
     CWM_SettingControl(SCL_DML_DRV_HW_CONFIG, &scl);
     //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__);
 
+    //搜寻是否接入传感器
     memset(&scl, 0, sizeof(scl));
     scl.iData[0] = 1;
     scl.iData[1] = 1;
     CWM_SettingControl(SCL_DML_DRV_INIT, &scl); 
     CWM_OS_dbgPrintf("DML device=%d\n", scl.iData[2]);
 
+    //获取初始化 driver清单
     memset(&scl, 0, sizeof(scl));
     scl.iData[0] = 1;
     CWM_SettingControl(SCL_DML_GET_INITED_LIST, &scl);
@@ -428,6 +582,7 @@ int cywee_main_dml(void) {
         CWM_OS_dbgPrintf("DML device[%d]: hw_id=%d hw_attr=%d\n", i, scl.iData[6 + i * 2], scl.iData[7 + i * 2]);
     }
 
+    //设置抬腕功能
     memset(&scl, 0, sizeof(scl));
     scl.iData[0] = 1;
     // scl.iData[1] = 5;
@@ -435,11 +590,87 @@ int cywee_main_dml(void) {
     // scl.iData[3] = 5;
     // scl.iData[4] = 5;
     CWM_SettingControl(SCL_HAND_UPDOWN_CONFIG, &scl);
-   
 
+/*
+int[0] = 1
+int[1] = floor_Height (cm)(設定樓層高度)(default: 380cm = 3.8m)
+  (0: default, 150 - 1000)
+int[2] = Anti-misoperation (一般模式時的防誤計步等級) (default: 4)
+  (0: default, 1: 最容易誤計步, 2, 3, 4:預設等級, 5, 6, 7: 最不容易誤計步)
+int[3] = 戶外跑步和一般模式時距離、配速和步距的調整 (default: 4)
+   (0: default, 1: 距離最短, 2, 3, 4:預設, 5, 6, 7:距離最長)
+int[4] = enable_extra_packet  (default: 不發送)
+   (0: default, 1: 發送, 2: 不發送)
+int[5] = Treadmill__steps  (跑步機校正參數)(steps) (default: 不校正)
+   (0: 不校正)
+int[6] = Treadmill__average_step_frequency  (跑步機校正參數) (steps/minute) (default: 不校正)
+   (0: 不校正)
+int[7] = Treadmill__uncalibration_distance  (跑步機校正參數)(meters) (default: 不校正)
+   (0: 不校正)
+int[8] = Treadmill__ground_truth_distance  (跑步機校正參數: 真實的跑步距離)(meters) (default: 不校正)
+   (0: 不校正)
+int[9] = floor_sensitivity  (樓層計算嚴謹度)(default: 3)
+  (0: default, 1:寬容, 2, 3, 4, 5, 7: 嚴格)
+int[10] = 防高頻誤觸  (default: 開啟)
+  (0: default,  1: 開啟, 2: 關閉)
+int[11] = 高步頻走路步距修正  (default: 開啟)
+  (0: default,  1: 開啟, 2: 關閉)
+int[12] = 活動程度區間的中度活動步頻  (default: 60)
+  (0: default, 60 - 270)
+int[13] = 活動程度區間的高度活動步頻  (default: 120)
+  (0: default, 60 - 270)
+
+*/
+    //配置跑步机模式相关参数(进入跑步机模式自动生效)
+    memset(&scl, 0, sizeof(scl));
+    scl.iData[0] = 1;
+    scl.iData[2] = 4;
+    scl.iData[3] = 4;
+
+    scl.iData[5] = 0;
+    scl.iData[6] = 0;
+    scl.iData[7] = 0;
+    scl.iData[8] = 0;
+
+    scl.iData[10] = 1;
+    scl.iData[11] = 1;
+    scl.iData[12] = 60;
+    scl.iData[13] = 120;
+    CWM_SettingControl(SCL_PEDO_CONFIG, &scl);
+
+/*
+int[0] = 1
+int[1] = 卡路里計算是否包含基礎卡路里  (default: 不包含基礎卡路里)
+  (0: default, 1:包含基礎卡路里, 2:不包含基礎卡路里)
+int[2] = 一般模式1001是否使用心率來計算卡路里 (default: 不使用心率)
+  (0: default, 1: 使用心率, 2:不使用心率)
+int[3] = 靜態運動時是否持續計算卡路里 (default: 停止計算)
+  (0: default, 1: 持續計算, 2: 停止計算)
+int[4] = 運動模式(包含一般模式1001)時,脫錶後是否持續計算卡路里 (default: 持續計算)
+  (0: default, 1: 持續計算, 2: 停止計算)
+int[5] = ar_model  (default: on)
+  (0: default, 1: on, 2: off)
+int[6] = ar_pedo_mode (default: 平衡)
+  (0: 平衡, 1: 計步優先, 2: 防誤觸優先)
+int[7] = 靜止時是否持續計算卡路里 (default: 持續計算)
+  (0: default, 1: 持續計算, 2: 停止計算)
+int[8] = motionSensScale活動量的靈敏度   (default: 4)
+  (0: default, 1: 最靈敏, 2, 3, 4, 5, 6, 7: 最不靈敏)
+int[9] = 軸向判斷     (default: 有軸向判斷)
+  (0: default, 1: 無軸向判斷, 2: 有軸向判斷)
+int[10] = 感測器雜訊度等級 (default: 低雜訊)
+  (0: 低雜訊, 1: 高雜訊A, 2 - 4, 5: 高雜訊E)
+*/
+    memset(&scl, 0, sizeof(scl));
+    scl.iData[0] = 1;
+    CWM_SettingControl(SCL_PEDO_CONFIG, &scl);
+
+
+    //呼叫任一個CWM_Sensor_Enable 前呼叫此指令 设置手动或自动模式
     memset(&scl, 0, sizeof(scl));
     scl.iData[0] = 1;
     scl.iData[1] = 1;
+    // int[2] = 3,代表開啟acc和gyro感測器  1代表开启acc
     scl.iData[2] = 1;
     CWM_SettingControl(SCL_DML_DRV_ENABLE, &scl);
     //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__);
@@ -468,10 +699,23 @@ int cywee_main_dml(void) {
     //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__);
     CWM_Sensor_Enable(IDX_ALGO_WATCH_HANDUP);
 
-    memset(&scl, 0, sizeof(scl));
-    scl.iData[0] = 1;
-    scl.iData[1] = SPORT_ACTIVE_MODE_NORMAL; //ACTIVITY_MODE_NORMAL 1001
-    CWM_SettingControl(SCL_SET_ACTIVITY_MODE, &scl);
+    /*
+    SPORT_ACTIVE_MODE_NORMAL             1001               // 一般模式(生活模式)      normal(base)    1001
+    SPORT_ACTIVE_MODE_TREADMILL          1002                // 跑步機      treadmill       1002
+    SPORT_ACTIVE_MODE_OUTDOOR_RUNNING    1003                // 戶外跑步   outdoor running 1003
+    SPORT_ACTIVE_MODE_INDOOR_RUNNING      1006                // 室內跑步  indoor running  1006
+    SPORT_ACTIVE_MODE_FITNESS_PEDOMETERR 1008                // 防誤觸計步        fitness_pedometer       1008
+    SPORT_ACTIVE_MODE_FREE_TRAINING      5001                // 自由運動   FreeTraining    5001
+    SPORT_ACTIVE_MODE_AR_ALERT           1001                // 長時間動作偵測  AR alert        1001
+    */
+
+
+    cyw_mode_init(cmd);
+
+    // memset(&scl, 0, sizeof(scl));
+    // scl.iData[0] = 1;
+    // scl.iData[1] = SPORT_ACTIVE_MODE_NORMAL; //ACTIVITY_MODE_NORMAL 1001
+    // CWM_SettingControl(SCL_SET_ACTIVITY_MODE, &scl);
     // CWM_SettingControl(SCL_SET_INACTIVITY_MODE, &scl);
     //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__);