From: penglei <1624952103@qq.com> Date: Tue, 9 Apr 2024 06:08:08 +0000 (+0800) Subject: 添加运动模式切换,消息发送 X-Git-Tag: release_V1.2.70_20241020_135402~1226 X-Git-Url: http://git.snicker.com.cn/css/static/gitweb.css?a=commitdiff_plain;h=5bec63cf969463077b9f26709b4adf245593ba87;p=mirrors%2FFD230.git 添加运动模式切换,消息发送 --- diff --git a/code/sdk/application/wearable/service/broadcast/include/broadcast_feature.h b/code/sdk/application/wearable/service/broadcast/include/broadcast_feature.h index 82d0a9fc8..08042084d 100755 --- a/code/sdk/application/wearable/service/broadcast/include/broadcast_feature.h +++ b/code/sdk/application/wearable/service/broadcast/include/broadcast_feature.h @@ -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, diff --git a/code/sdk/application/wearable/service/broadcast/src/broadcast_implement.c b/code/sdk/application/wearable/service/broadcast/src/broadcast_implement.c index 474ffdc6e..2dc6498c6 100755 --- a/code/sdk/application/wearable/service/broadcast/src/broadcast_implement.c +++ b/code/sdk/application/wearable/service/broadcast/src/broadcast_implement.c @@ -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}, diff --git a/code/sdk/application/wearable/service/factorytest_service/factorytest_protocol.c b/code/sdk/application/wearable/service/factorytest_service/factorytest_protocol.c index 2b6d802e8..d3d6a1b2e 100644 --- a/code/sdk/application/wearable/service/factorytest_service/factorytest_protocol.c +++ b/code/sdk/application/wearable/service/factorytest_service/factorytest_protocol.c @@ -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: if (testitem == 0x02) { - + //获取软件版本 uint8_t buildversion[128]={0}; uint16_t versionlen = 128; ret = uapi_get_buildversion(buildversion,versionlen); @@ -597,7 +597,7 @@ void factorytest_protocol_soft_test_decode(uint8_t submode,uint8_t testitem,uint send_data, 7); } - //获取蓝牙信号强度(未完成) + //获取蓝牙信号强度 if (testitem == 0x03) { uint8_t send_data = 0x00; @@ -608,7 +608,7 @@ void factorytest_protocol_soft_test_decode(uint8_t submode,uint8_t testitem,uint &send_data, 1); } - //发射功率(未完成) + //发射功率 if (testitem == 0x05) { uint8_t send_data = 0x00; @@ -1445,7 +1445,7 @@ errcode_t factorytest_protocol_decode(uint8_t *buf, uint16_t event_size) printf("crc16 0x%04X vs 0x%04X\n",crc16,crc16_2); - //if( crc16 == crc16_2) //校验通过,开始正式解析 + if( crc16 == crc16_2) //校验通过,开始正式解析 { printf("mode %d\n",header.mode); switch(header.mode) diff --git a/code/sdk/application/wearable/service/msg_center/src/msg_center_customer.cpp b/code/sdk/application/wearable/service/msg_center/src/msg_center_customer.cpp index 5c6311f0f..1133d07dd 100755 --- a/code/sdk/application/wearable/service/msg_center/src/msg_center_customer.cpp +++ b/code/sdk/application/wearable/service/msg_center/src/msg_center_customer.cpp @@ -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) diff --git a/code/sdk/drivers/peripheral/cywee/CMakeLists.txt b/code/sdk/drivers/peripheral/cywee/CMakeLists.txt index 568a75f9a..d898a7667 100644 --- a/code/sdk/drivers/peripheral/cywee/CMakeLists.txt +++ b/code/sdk/drivers/peripheral/cywee/CMakeLists.txt @@ -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 ) diff --git a/code/sdk/drivers/peripheral/cywee/Inc/cywee_hal.h b/code/sdk/drivers/peripheral/cywee/Inc/cywee_hal.h index d46b8312e..cc6647b53 100644 --- a/code/sdk/drivers/peripheral/cywee/Inc/cywee_hal.h +++ b/code/sdk/drivers/peripheral/cywee/Inc/cywee_hal.h @@ -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 diff --git a/code/sdk/drivers/peripheral/cywee/Inc/cywee_service.h b/code/sdk/drivers/peripheral/cywee/Inc/cywee_service.h index 7771f9149..767a405d4 100644 --- a/code/sdk/drivers/peripheral/cywee/Inc/cywee_service.h +++ b/code/sdk/drivers/peripheral/cywee/Inc/cywee_service.h @@ -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 */ diff --git a/code/sdk/drivers/peripheral/cywee/service/cywee_at_cmd.c b/code/sdk/drivers/peripheral/cywee/service/cywee_at_cmd.c index b53a177db..2f8e57671 100644 --- a/code/sdk/drivers/peripheral/cywee/service/cywee_at_cmd.c +++ b/code/sdk/drivers/peripheral/cywee/service/cywee_at_cmd.c @@ -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 index 000000000..089889376 --- /dev/null +++ b/code/sdk/drivers/peripheral/cywee/service/cywee_hal.c @@ -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 +#include +#include +#include + +#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; +} + + diff --git a/code/sdk/drivers/peripheral/cywee/service/cywee_service.c b/code/sdk/drivers/peripheral/cywee/service/cywee_service.c index 9d04d1179..2eb18f0e6 100644 --- a/code/sdk/drivers/peripheral/cywee/service/cywee_service.c +++ b/code/sdk/drivers/peripheral/cywee/service/cywee_service.c @@ -6,7 +6,6 @@ * History: \n * 2022-08-16, Create file. \n */ - #include "pinctrl.h" #include "debug_print.h" #include "soc_osal.h" @@ -31,6 +30,14 @@ #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"); diff --git a/code/sdk/drivers/peripheral/cywee/src/main_dml.c b/code/sdk/drivers/peripheral/cywee/src/main_dml.c index 29df88487..6b53f68e3 100644 --- a/code/sdk/drivers/peripheral/cywee/src/main_dml.c +++ b/code/sdk/drivers/peripheral/cywee/src/main_dml.c @@ -6,11 +6,12 @@ #include #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__);