#include "custom_utils.h"
+#include "cywee_service.h"
+
bool batteryservice_get_voltage_by_channel(float *voltage, uint8_t channel);
battery_info_t *get_current_battery_info(void);
static bool g_batter_service_initialled = false;
static uint8_t g_check_count = 0;
+static int oncharging_status = 0;
+
static void battery_check_timer_callback(void* data);
errcode_t charger_plug_event_notify(uint8_t plugged);
errcode_t charger_plug_event_ui_sendmsg_toUI(uint8_t plugged);
uint8_t percent = batteryservice_get_voltage(&voltage);
//获取电池温度
batteryservice_get_battery_temp(&bat_temp);
-
- if(get_charge_stat() == 1){
+
+ int status = get_charge_stat();
+ if(oncharging_status != status)
+ {
+ oncharging_status = status;
+ do_cywee_service_check_msg(CYWEE_SERVICE_CMD_ONCHARGING_CHANGE,&status);
+ }
+
+ if(status == 1){
PRINT("charging enable charge ! bat-temp %.2f Vs highest temp value %.2f !\n",bat_temp,BATTERY_DISABLE_CHARGE_HI_TEMP_VALUE);
/**
#include "displaybrightness/include/DisplayBrightnessModel.h"
#include "power_display_service.h"
#include "custom_utils.h"
+#include "cywee_service.h"
extern "C" errcode_t uapi_get_timestampe_ms(uint64_t *tm);
#define BLOODKEYABLE 0
uint8_t md = PPG_SERVICE_CMD_TYPE_STOP_SPO2_TEST;
send_ppg_cmd_msg(md);
startspo2 = true;
+ do_cywee_service_check_msg(CYWEE_SERVICE_CMD_NORMAL_MODE,NULL);
}
}
if (BloodOxygenModel::GetInstance()->GetBloodCheckViewStatus() == false)
BloodCheckView::GetInstance()->UpShowBloodText(); // 更新检测界面
if (startspo2 == true)
{
+ do_cywee_service_check_msg(CYWEE_SERVICE_CMD_EXIT,NULL);
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetCheckStatus : true");
uint8_t md = PPG_SERVICE_CMD_TYPE_DO_SPO2_TEST;
send_ppg_cmd_msg(md);
#include "heartrate/include/HeartCheckView.h"
#include "heartrate/include/HeartBandoffView.h"
#include "health_service.h"
+#include "cywee_service.h"
#define HEARTKEYABLE 0
uint8_t md = PPG_SERVICE_CMD_TYPE_STOP_PPG_TEST;
send_ppg_cmd_msg(md);
startheart = true;
+ do_cywee_service_check_msg(CYWEE_SERVICE_CMD_NORMAL_MODE,NULL);
}
}
HeartCheckView::GetInstance()->UpShowHeartText(); // 更新检测界面
if (startheart == true)
{
+ do_cywee_service_check_msg(CYWEE_SERVICE_CMD_EXIT,NULL);
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetCheckStatus : true");
uint8_t md = PPG_SERVICE_CMD_TYPE_DO_PPG_TEST;
send_ppg_cmd_msg(md);
#include <iomanip>\r
#include <sstream>\r
\r
-extern "C" void do_cywee_service_check_msg(int cmd);\r
+extern "C" void do_cywee_service_check_msg(int cmd,int data[]);\r
\r
extern "C"\r
{\r
{\r
// 根据不同的运动项目进行不同的运动\r
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TraingCardPresenter::OpenSensor!!");\r
- do_cywee_service_check_msg(CYWEE_SERVICE_CMD_EXIT);\r
+ do_cywee_service_check_msg(CYWEE_SERVICE_CMD_EXIT,NULL);\r
switch (type)\r
{\r
case ExerciseClass::NORMAL:\r
- do_cywee_service_check_msg(CYWEE_SERVICE_CMD_NORMAL_MODE);\r
+ do_cywee_service_check_msg(CYWEE_SERVICE_CMD_NORMAL_MODE,NULL);\r
break;\r
case ExerciseClass::TREADMILL:\r
- do_cywee_service_check_msg(CYWEE_SERVICE_CMD_TREADMILL_MODE);\r
+ do_cywee_service_check_msg(CYWEE_SERVICE_CMD_TREADMILL_MODE,NULL);\r
break;\r
case ExerciseClass::OUTDOOR:\r
- do_cywee_service_check_msg(CYWEE_SERVICE_CMD_OUTDOOR_RUNNING_MODE);\r
+ do_cywee_service_check_msg(CYWEE_SERVICE_CMD_OUTDOOR_RUNNING_MODE,NULL);\r
break;\r
case ExerciseClass::INDOOR:\r
- do_cywee_service_check_msg(CYWEE_SERVICE_CMD_INDOOR_RUNNING_MODE);\r
+ do_cywee_service_check_msg(CYWEE_SERVICE_CMD_INDOOR_RUNNING_MODE,NULL);\r
break;\r
case ExerciseClass::FITNESS_PEDOMETER:\r
- do_cywee_service_check_msg(CYWEE_SERVICE_CMD_FITNESS_PEDOMETER_MODE);\r
+ do_cywee_service_check_msg(CYWEE_SERVICE_CMD_FITNESS_PEDOMETER_MODE,NULL);\r
break;\r
case ExerciseClass::FREE_TRAINING:\r
- do_cywee_service_check_msg(CYWEE_SERVICE_CMD_FREE_TRAINING_MODE);\r
+ do_cywee_service_check_msg(CYWEE_SERVICE_CMD_FREE_TRAINING_MODE,NULL);\r
break;\r
default:\r
break;\r
OpenSensor(ExerciseClass::NORMAL);\r
break;\r
case ExerciseState::Pause:\r
- do_cywee_service_check_msg(CYWEE_SERVICE_CMD_PAUSE);\r
+ do_cywee_service_check_msg(CYWEE_SERVICE_CMD_PAUSE,0);\r
break;\r
case ExerciseState::Continue:\r
- do_cywee_service_check_msg(CYWEE_SERVICE_CMD_RESUME);\r
+ do_cywee_service_check_msg(CYWEE_SERVICE_CMD_RESUME,0);\r
break;\r
default:\r
break;\r
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);
+void activity_mode_setstatus(int cmd);
+void activity_mode_exit(void);
+void cywee_oncharging_update(int oncharging_status);
+void cywee_wearstatus_update(int wearstatus);
+void cywee_hrs_wearstatus_update(int hrs_data,int wearstatus);
+
+
+extern uint8_t hrs_mode_state;
#pragma pack()
void watch_hand_updown(int fdata);
void cyw_inactivity_mode_change(int mode);
void cyw_activity_mode_change(int mode);
+void set_user_info(int age,int gender,double weight,int height,int wearing_method);
#ifdef __cplusplus
#if __cplusplus
* @Author: penglei 1624952103@qq.com
* @Date: 2024-03-26 20:29:58
* @LastEditors: penglei 1624952103@qq.com
- * @LastEditTime: 2024-04-11 19:01:22
+ * @LastEditTime: 2024-04-16 15:50:32
* @FilePath: /FD230/code/sdk/drivers/peripheral/cywee/Inc/cywee_service.h
* @Description:
*
#define CYWEE_SERVICE_CMD_EXIT 0x1E
+#define CYWEE_SERVICE_CMD_WEAR_STATUS_CHANGE 0x1F
+#define CYWEE_SERVICE_CMD_ONCHARGING_CHANGE 0x20
+#define CYWEE_SERVICE_CMD_HRS_WEARSTATUS_CHANGE 0x21
+
errcode_t uapi_cywee_service_init(void);
void uapi_cywee_service_deinit(void);
/**
* 测试指令 参数cmd 选项: ACC_SERVICE_CMD_START_CHECK,ACC_SERVICE_CMD_STOP_CHECK
*/
-void do_cywee_service_check_msg(int cmd);
+void do_cywee_service_check_msg(int cmd,int data[]);
#ifdef __cplusplus
if (strcmp(mode, "start") == 0) {
PRINT("cywee start\n");
- do_cywee_service_check_msg(CYWEE_SERVICE_CMD_START_CHECK);
+ do_cywee_service_check_msg(CYWEE_SERVICE_CMD_START_CHECK,NULL);
} else if (strcmp(mode, "stop") == 0) {
PRINT("cywee stop\n");
- do_cywee_service_check_msg(CYWEE_SERVICE_CMD_STOP_CHECK);
+ do_cywee_service_check_msg(CYWEE_SERVICE_CMD_STOP_CHECK,NULL);
} else if (strcmp(mode, "test") == 0) {
PRINT("cywee test\n");
- do_cywee_service_check_msg(CYWEE_SERVICE_CMD_TEST);
+ do_cywee_service_check_msg(CYWEE_SERVICE_CMD_TEST,NULL);
} else if (strcmp(mode, "normal") == 0) {
PRINT("cywee normal mode\n");
- do_cywee_service_check_msg(CYWEE_SERVICE_CMD_NORMAL_MODE);
+ do_cywee_service_check_msg(CYWEE_SERVICE_CMD_NORMAL_MODE,NULL);
} else if (strcmp(mode, "treadmill") == 0) {
PRINT("cywee treadmill mode\n");
- do_cywee_service_check_msg(CYWEE_SERVICE_CMD_TREADMILL_MODE);
+ do_cywee_service_check_msg(CYWEE_SERVICE_CMD_TREADMILL_MODE,NULL);
} else if (strcmp(mode, "outdoor") == 0) {
PRINT("cywee outdoor running mode\n");
- do_cywee_service_check_msg(CYWEE_SERVICE_CMD_OUTDOOR_RUNNING_MODE);
+ do_cywee_service_check_msg(CYWEE_SERVICE_CMD_OUTDOOR_RUNNING_MODE,NULL);
} else if (strcmp(mode, "indoor") == 0) {
PRINT("cywee indoor running mode\n");
- do_cywee_service_check_msg(CYWEE_SERVICE_CMD_INDOOR_RUNNING_MODE);
+ do_cywee_service_check_msg(CYWEE_SERVICE_CMD_INDOOR_RUNNING_MODE,NULL);
} else if (strcmp(mode, "pedometer") == 0) {
PRINT("cywee fitness pedometer mode\n");
- do_cywee_service_check_msg(CYWEE_SERVICE_CMD_FITNESS_PEDOMETER_MODE);
+ do_cywee_service_check_msg(CYWEE_SERVICE_CMD_FITNESS_PEDOMETER_MODE,NULL);
} else if (strcmp(mode, "free") == 0) {
PRINT("cywee free training mode\n");
- do_cywee_service_check_msg(CYWEE_SERVICE_CMD_FREE_TRAINING_MODE);
+ do_cywee_service_check_msg(CYWEE_SERVICE_CMD_FREE_TRAINING_MODE,NULL);
} else if (strcmp(mode, "pause") == 0) {
PRINT("cywee pause\n");
- do_cywee_service_check_msg(CYWEE_SERVICE_CMD_PAUSE);
+ do_cywee_service_check_msg(CYWEE_SERVICE_CMD_PAUSE,NULL);
} else if (strcmp(mode, "resume") == 0) {
PRINT("cywee resume\n");
- do_cywee_service_check_msg(CYWEE_SERVICE_CMD_RESUME);
+ do_cywee_service_check_msg(CYWEE_SERVICE_CMD_RESUME,NULL);
} else if (strcmp(mode, "exit") == 0)
{
PRINT("cywee exit\n");
- do_cywee_service_check_msg(CYWEE_SERVICE_CMD_EXIT);
- }
+ do_cywee_service_check_msg(CYWEE_SERVICE_CMD_EXIT,NULL);
+ }
return ERRCODE_SUCC;
}
typedef struct
{
uint8_t cmd;
+ uint8_t data[2];
} cywee_cmd_t;
/***
* 其他cmd在Header里定义,对外开放
unused(data);
g_bat_timer_is_running = false;
if(cywee_service_running_stat == true){
- do_cywee_service_check_msg(CYWEE_SERVICE_CMD_TIMER_CHECK);
+ do_cywee_service_check_msg(CYWEE_SERVICE_CMD_TIMER_CHECK,NULL);
// cywee_service_timer_start_check(CYWEE_CHECK_MS);
}
}
-void do_cywee_service_check_msg(int cmd)
+void do_cywee_service_check_msg(int cmd,int data[])
{
int ret;
cywee_cmd_t mail = {0};
mail.cmd = cmd;
+ mail.data[0] = data[0];
+ mail.data[1] = data[1];
ret = osal_msg_queue_write_copy(g_cywee_queue, (void *)&mail, sizeof(cywee_cmd_t), 0);
if (ret != OSAL_SUCCESS) {
PRINT("Error cywee Check MSG 0x%02X send failed! err=0x%x! \r\n",cmd, ret);
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);
+ activity_mode_setstatus(1);
}else if(mail.cmd == CYWEE_SERVICE_CMD_RESUME){
- activity_setstatus(0);
+ activity_mode_setstatus(0);
}else if(mail.cmd == CYWEE_SERVICE_CMD_EXIT){
cywee_service_running_stat = false;
if (g_cywee_service_timer != NULL) osTimerStop(g_cywee_service_timer);
- activity_exit();
+ activity_mode_exit();
+ }else if(mail.cmd == CYWEE_SERVICE_CMD_ONCHARGING_CHANGE)
+ {
+ cywee_oncharging_update(mail.data[0]);
+ }else if(mail.cmd == CYWEE_SERVICE_CMD_WEAR_STATUS_CHANGE)
+ {
+ cywee_wearstatus_update(mail.data[0]);
+ }else if(mail.cmd == CYWEE_SERVICE_CMD_HRS_WEARSTATUS_CHANGE)
+ {
+ cywee_hrs_wearstatus_update(mail.data[0],mail.data[1]);
}
}
}
g_cywee_service_timer = osTimerNew((osTimerFunc_t)cywee_service_check_timer_callback, osTimerPeriodic, NULL, NULL);
cywee_register_msg_callback(cywee_msg_callback);
- do_cywee_service_check_msg(CYWEE_SERVICE_CMD_START_CHECK);
+ do_cywee_service_check_msg(CYWEE_SERVICE_CMD_START_CHECK,NULL);
return ERRCODE_SUCC;
}
#define AP_ENABLE_DML_SDO_LISTEN
-int16_t gsensor_x[24] = {0};
-int16_t gsensor_y[24] = {0};
-int16_t gsensor_z[24] = {0};
#define GSENSON_MSG_COUNT 16
static gsenson_t gxyz_t;
cywee_activity_result_t c_activity_result_t;
cywee_inactivity_result_t c_inactivity_result_t;
-static int cywee_installized = 0 ;
-static int free_training_installized = 0 ;
+static uint8_t cywee_installized = 0 ;
-static osTimerId_t g_cywee_hrs_timer;
+CustomSensorData csd;
-// static osTimerId_t g_cywee_wearstatus_timer;
+static uint8_t hrs = 0;
-static osTimerId_t g_cywee_oncharging_timer;
-CustomSensorData csd;
+uint8_t hrs_mode_state = 0;
+static uint8_t wear_mode_state = 0;
+
+static uint8_t mail = 0;
+
+void watch_hand_updown(int fdata)
+{
+ #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
+ }
+}
+
+void get_sleep_data(void)
+{
+ memset(&scl, 0, sizeof(scl));
+ scl.iData[0] = 1;
+ scl.iData[1] = 0;
+ CWM_SettingControl(SCL_REQ_SLEEPING_DATA, &scl);
+}
-static uint8_t hrs = 0;
-static uint8_t wearstatus = 0;
void set_user_info(int age,int gender,double weight,int height,int wearing_method)
{
memset(&scl, 0, sizeof(scl));
scl.iData[0] = 1;
scl.iData[1] = age;
- scl.iData[2] = weight;
+ scl.iData[2] = gender;
scl.iData[3] = (int)weight;
- scl.iData[4] = weight;
+ scl.iData[4] = height;
scl.iData[5] = wearing_method;
CWM_SettingControl(SCL_USER_INFO, &scl);
}
time(&rawtime);
timeinfo = localtime(&rawtime);
PRINT("year[%d], mon[%d], day[%d], hour[%d], min[%d], msc[%d] \r\n",
- timeinfo->tm_year,timeinfo->tm_mon,timeinfo->tm_mday,
+ timeinfo->tm_year+1900,timeinfo->tm_mon+1,timeinfo->tm_mday,
timeinfo->tm_hour,timeinfo->tm_min,timeinfo->tm_sec);
memset(&scl, 0, sizeof(scl));
CWM_SettingControl(SCL_DATE_TIME, &scl);
}
-void cywee_hrs_check_timer_callback(void)
+void cywee_hrs_wearstatus_update(int hrs_data,int wearstatus)
{
- get_hrs_wearstatus(&hrs,&wearstatus);
- CWM_OS_dbgPrintf("hrs : %d,wearstatus : %d \r\n",hrs,wearstatus);
+ uint8_t wear_status = 0;
+ hrs = hrs_data;
+ wear_status = wearstatus;
+ CWM_OS_dbgPrintf("hrs : %d\r\n",hrs);
+ CWM_OS_dbgPrintf("wear_status : %d\r\n",wear_status);
+
memset(&csd, 0, sizeof(CUSTOM_HEARTRATE));
csd.sensorType = CUSTOM_HEARTRATE;
- csd.fData[0] = hrs + 15;
+ csd.fData[0] = hrs;
CWM_CustomSensorInput(&csd);
+
memset(&csd, 0, sizeof(CUSTOM_OFFBODY_DETECT));
csd.sensorType = CUSTOM_OFFBODY_DETECT;
- csd.fData[0] = wearstatus;
+ csd.fData[0] = wear_status;
CWM_CustomSensorInput(&csd);
+
}
-void cywee_oncharging_check_timer_callback(void)
+void cywee_oncharging_update(int oncharging_status)
{
- bool oncharging_status;
- oncharging_status = uapi_get_charger_plug_status();
- //CWM_OS_dbgPrintf("charging_status : %d\r\n",oncharging_status);
+ CWM_OS_dbgPrintf("oncharging : %d\r\n",oncharging_status);
memset(&csd, 0, sizeof(CUSTOM_ON_CHARGING));
csd.sensorType = CUSTOM_ON_CHARGING;
csd.fData[0] = oncharging_status;
CWM_CustomSensorInput(&csd);
}
+void cywee_wearstatus_update(int wearstatus)
+{
+ CWM_OS_dbgPrintf("111wearstatus : %d\r\n",wearstatus);
+ memset(&csd, 0, sizeof(CUSTOM_OFFBODY_DETECT));
+ csd.sensorType = CUSTOM_OFFBODY_DETECT;
+ csd.fData[0] = wearstatus;
+ CWM_CustomSensorInput(&csd);
+}
-void free_training_task(void)
+void activity_mode_task(void)
{
- ppg_send_cmd_to_driver("hrs",1);
+ if(hrs_mode_state == 1)
+ {
+ ppg_send_cmd_to_driver("hrs",0);
+ hrs_mode_state = 0;
+ }
+ if(wear_mode_state == 1)
+ {
+ ppg_send_cmd_to_driver("wear",0);
+ wear_mode_state = 0;
+ }
+ if(mail == 1 && hrs_mode_state == 0)
+ {
+ ppg_send_cmd_to_driver("hrs",1);
+ hrs_mode_state = 1;
+ }
+ else if(mail == 2 && wear_mode_state == 0)
+ {
+ ppg_send_cmd_to_driver("wear",1);
+ wear_mode_state = 1;
+ }
}
-errcode_t free_training_init(void)
+void activity_mode_exit()
+{
+ ppg_send_cmd_to_driver("wear",0);
+ wear_mode_state = 0;
+}
+
+errcode_t activity_mode_init(void)
{
- if(free_training_installized == 1)
- return ERRCODE_FAIL;
- free_training_installized = 1;
app_task_definition_t taskcfg={0};
taskcfg.create_queue_handle = NULL;
- taskcfg.attr.name="free_training_service";
+ taskcfg.attr.name="activity_mode_service";
taskcfg.attr.priority = TASK_PRIORITY_CMD;
taskcfg.attr.stack_size = 1024*8;
- taskcfg.func = free_training_task;
+ taskcfg.func = activity_mode_task;
taskcfg.use_mem = USE_EXTEND_MEM;
errcode_t ret=uapi_create_osThread_custom(&taskcfg);
if(ret != ERRCODE_SUCC)
{
- PRINT("create free_training_task failed %d!\r\n",ret);
+ CWM_OS_dbgPrintf("create activity_mode_task failed %d!\r\n",ret);
return ERRCODE_FAIL;
}
-
- g_cywee_hrs_timer = osTimerNew((osTimerFunc_t)cywee_hrs_check_timer_callback, osTimerPeriodic, NULL, NULL);
- //g_cywee_wearstatus_timer = osTimerNew((osTimerFunc_t)cywee_wearstatus_check_timer_callback, osTimerPeriodic, NULL, NULL);
- g_cywee_oncharging_timer = osTimerNew((osTimerFunc_t)cywee_oncharging_check_timer_callback, osTimerPeriodic, NULL, NULL);
-
return ERRCODE_SUCC;
}
-void watch_hand_updown(int fdata)
-{
- #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
- }
-}
-
//0:resume , 1:pause
-void activity_setstatus(int cmd)
+void activity_mode_setstatus(int cmd)
{
memset(&scl, 0, sizeof(scl));
scl.iData[0] = 1;
CWM_SettingControl(SCL_ACTIVITY_PAUSE, &scl);
}
-
-void activity_exit(void)
-{
- memset(&scl, 0, sizeof(scl));
- scl.iData[0] = 1;
- CWM_SettingControl(SCL_REQ_ACTIVITY_EXIT, &scl);
-
- // if(cywee_installized == 1)
- // cywee_installized = 0;
- if(free_training_installized == 1)
- {
- free_training_installized = 0;
- //osTimerStop(g_cywee_wearstatus_timer);
- osTimerStop(g_cywee_oncharging_timer);
- osTimerStop(g_cywee_hrs_timer);
- osTimerDelete(g_cywee_oncharging_timer);
- osTimerDelete(g_cywee_hrs_timer);
- ppg_send_cmd_to_driver("hrs",0);
- }
-}
-
void cyw_inactivity_mode_change(int mode)
{
+ time_sync();
switch (mode)
{
//無作用
//久坐和有效站立
case INACTIVITY_MODE_SEDENTARY:
- PRINT("INACTIVITY_MODE_SEDENTARY\r\n");
+ CWM_OS_dbgPrintf("INACTIVITY_MODE_SEDENTARY\r\n");
//training_mode_init();
//配置久坐相关参数
memset(&scl, 0, sizeof(scl));
void cyw_activity_mode_change(int mode)
{
+ activity_mode_init();
switch (mode)
{
//一般模式(生活模式)
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;
//跑步机
scl.iData[0] = 1;
scl.iData[1] = SPORT_ACTIVE_MODE_TREADMILL;
CWM_SettingControl(SCL_SET_ACTIVITY_MODE, &scl);
-
break;
//户外跑步
//自由运动
case SPORT_ACTIVE_MODE_FREE_TRAINING:
- free_training_init();
memset(&scl, 0, sizeof(scl));
scl.iData[0] = 1;
scl.iData[1] = SPORT_ACTIVE_MODE_FREE_TRAINING;
// CWM_OS_dbgPrintf("get_gsonsen_xyz_fail\n");
// return;
// }
- CWM_OS_dbgPrintf("x : %d , y : %d , z : %d\n", gxyz_t_queue[left_falg].x, gxyz_t_queue[left_falg].y, gxyz_t_queue[left_falg].z);
+ //CWM_OS_dbgPrintf("x : %d , y : %d , z : %d\n", gxyz_t_queue[left_falg].x, gxyz_t_queue[left_falg].y, gxyz_t_queue[left_falg].z);
t[i].x= gxyz_t_queue[left_falg].x;
t[i].y= gxyz_t_queue[left_falg].y;
t[i].z= gxyz_t_queue[left_falg].z;
gxyz_t_queue[right_falg].x= sensorEVT->fData[0];
gxyz_t_queue[right_falg].y= sensorEVT->fData[1];
gxyz_t_queue[right_falg].z= sensorEVT->fData[2];
-
}
else
{
gxyz_t_queue[right_falg].x= sensorEVT->fData[0];
gxyz_t_queue[right_falg].y= sensorEVT->fData[1];
gxyz_t_queue[right_falg].z= sensorEVT->fData[2];
- CWM_OS_dbgPrintf("write: x=%d, y=%d, z=%d\n", gxyz_t_queue[right_falg].x ,gxyz_t_queue[right_falg].y ,gxyz_t_queue[right_falg].z);
+ //CWM_OS_dbgPrintf("write: x=%d, y=%d, z=%d\n", gxyz_t_queue[right_falg].x ,gxyz_t_queue[right_falg].y ,gxyz_t_queue[right_falg].z);
}
if((int)sensorEVT->fData[1] == CUSTOM_OFFBODY_DETECT)
{
CWM_OS_dbgPrintf("CUSTOM_OFFBODY_DETECT !!! \r\n");
- // if(free_training_installized == 1)
- // osTimerStart(g_cywee_wearstatus_timer,20);
+ if((int)sensorEVT->fData[2] == 1)
+ {
+ memset(&csd, 0, sizeof(CUSTOM_OFFBODY_DETECT));
+ csd.sensorType = CUSTOM_OFFBODY_DETECT;
+ csd.fData[0] = 0;
+ CWM_CustomSensorInput(&csd);
+ }
}
if((int)sensorEVT->fData[1] == CUSTOM_ON_CHARGING)
{
CWM_OS_dbgPrintf("CUSTOM_ON_CHARGING !!! \r\n");
- //if(free_training_installized == 1)
- osTimerStart(g_cywee_oncharging_timer,20);
+ if((int)sensorEVT->fData[2] == 1)
+ {
+ memset(&csd, 0, sizeof(CUSTOM_ON_CHARGING));
+ csd.sensorType = CUSTOM_ON_CHARGING;
+ csd.fData[0] = 1;
+ CWM_CustomSensorInput(&csd);
+ }
}
if((int)sensorEVT->fData[1] == CUSTOM_HEARTRATE)
{
CWM_OS_dbgPrintf("CUSTOM_HEARTRATE !!! \r\n");
- if(free_training_installized == 1)
- osTimerStart(g_cywee_hrs_timer,20);
}
break;
case IDX_ALGO_SHAKE:
c_activity_result_t.MHR_zone = (int)sensorEVT->fData[6];
c_activity_result_t.hrs = hrs;
cywee_func(CYWEE_MSG_TYPE_ACTIVITY_UPDATE,&c_activity_result_t,sizeof(cywee_activity_result_t));
-
+
}else if((int)sensorEVT->fData[0] == 102)
{
CWM_OS_dbgPrintf("ar alert type : %d\n",(int)sensorEVT->fData[1]);
int cywee_main_dml(int cmd)
{
+ if(cmd == SPORT_ACTIVE_MODE_NORMAL)
+ mail = 2;
+ else
+ mail = 1;
if (cywee_installized==0)
{
memset(&scl, 0, sizeof(scl));
scl.iData[0] = 1;
scl.iData[2] = 1;
- // int[2] = 3,代表開啟acc和gyro感測器 1代表开启acc
scl.iData[3] = 1;
scl.iData[4] = 3;
scl.iData[5] = 1;
CWM_SettingControl(SCL_SEDENTARY, &scl);
+ // CWM_SettingControl(SCL_LOG, &scl);
+
+
- //呼叫任一個CWM_Sensor_Enable 前呼叫此指令 设置手动或自动模式
+ //呼叫任一個CWM_Sensor_Enable 前呼叫此指令 设置手动或自动模式
memset(&scl, 0, sizeof(scl));
scl.iData[0] = 1;
scl.iData[1] = 1;
memset(&scl, 0, sizeof(scl));
scl.iData[0] = 1;
scl.iData[3] = 3;
- scl.iData[4] = 5;
- // CWM_SettingControl(SCL_LOG, &scl);
-
+ scl.iData[4] = 5;
+
CWM_Sensor_Enable(IDX_REQUEST_SENSOR);
// //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__);
- CWM_Sensor_Enable(IDX_ALGO_INACTIVITY_OUTPUT);
CWM_Sensor_Enable(IDX_ALGO_ACTIVITY_OUTPUT);
CWM_Sensor_Enable(IDX_ALGO_ABSOLUTE_STATIC);
//CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__);
CWM_Sensor_Enable(IDX_ALGO_WATCH_HANDUP);
- CWM_OS_dbgPrintf("cywee_installized skip install\n");
}
-
cyw_activity_mode_change(cmd);
if(cmd == SPORT_ACTIVE_MODE_NORMAL)
- cyw_activity_mode_change(INACTIVITY_MODE_NOTHING);
+ {
+ cyw_inactivity_mode_change(INACTIVITY_MODE_SEDENTARY);
+ }
// memset(&scl, 0, sizeof(scl));
// scl.iData[0] = 1;
// scl.iData[1] = SPORT_ACTIVE_MODE_NORMAL; //ACTIVITY_MODE_NORMAL 1001
// #include "app_task.h"\r
\r
#include "cywee_hal.h"\r
+#include "cywee_service.h"\r
\r
FT_CUSTOM_RESULTS_t hrsresult ={0};\r
\r
int16_t gsen_fifo_y[64]={0};\r
int16_t gsen_fifo_z[64]={0};\r
\r
-gsenson_t gsensordata[8];\r
+gsenson_t gsensordata[16];\r
\r
#ifdef SPO2_VECTOR\r
#include "spo2_vec.h"\r
//uint8_t alg_ram[10] = {0};\r
ppg_sensor_data_t ppg_s_data;\r
\r
-uint8_t free_trainning_hrs = 0;\r
-uint8_t free_trainning_wearstatus = 0;\r
+int hrs_data[2] = {0};\r
+\r
+int wear_mode_status = 0;\r
\r
//////// spo2 para and switches\r
const uint8_t COUNT_BLOCK_NUM = 25; //delay the block of some single good signal after a series of bad signal\r
static int32_t cali_data_cnt = 0;\r
#endif\r
\r
-void get_hrs_wearstatus(uint8_t *hrs,uint8_t *wearstatus)\r
-{\r
- *hrs = free_trainning_hrs;\r
- *wearstatus = free_trainning_wearstatus;\r
-}\r
-\r
-\r
// us 延时函数, 客户需填写\r
void hx3695_delay_us(uint32_t us)\r
{\r
hx3695_brust_read_reg(0x22, databuf, 3); \r
read_fifo_first_flg = 0;\r
} \r
- hx3695_brust_read_reg(0x22, fifo_data_buf, fifo_read_bytes);\r
- PRINT("hx3695_brust_read_reg !!! \r\n"); \r
- for(ii=0; ii<fifo_read_bytes; ii++)\r
- {\r
- PRINT("%d/%d, %d\r\n", ii+1,fifo_read_bytes,fifo_data_buf[ii]); \r
- }\r
+ hx3695_brust_read_reg(0x22, fifo_data_buf, fifo_read_bytes); \r
+ // for(ii=0; ii<fifo_read_bytes; ii++)\r
+ // {\r
+ // PRINT("%d/%d, %d\r\n", ii+1,fifo_read_bytes,fifo_data_buf[ii]); \r
+ // }\r
for(ii=0; ii<fifo_read_length; ii++)\r
{\r
if(sig==0)\r
\r
void heart_rate_meas_timeout_handler(void * p_context)\r
{\r
- TYHX_LOG(" heart_rate_meas_timeout_handler mode: %d \n", work_mode_flag);\r
+ //TYHX_LOG(" heart_rate_meas_timeout_handler mode: %d \n", work_mode_flag);\r
\r
switch(work_mode_flag)\r
{\r
// result.gr_data_final = hrs_s_dat.green_data[0];\r
// result.ir_data_final = hrs_s_dat.ir_data[0];\r
// hx3695_factory_test_process(NULL, APP_FACTORY_TEST_HR_START, &result);\r
-\r
- //gsensor_get_n_data(1,gsensordata);\r
-\r
- // for(ii=0; ii<*count; ii++)\r
- // {\r
- // if(ii == 8)\r
- // {\r
- // gsen_fifo_x_send[ii] = gsen_fifo_x_send[ii - 1];\r
- // gsen_fifo_y_send[ii] = gsen_fifo_y_send[ii - 1];\r
- // gsen_fifo_z_send[ii] = gsen_fifo_z_send[ii - 1];\r
- // }\r
- // else\r
- // {\r
- // gsen_fifo_x_send[ii] = gsensordata[ii].x;\r
- // gsen_fifo_y_send[ii] = gsensordata[ii].y;\r
- // gsen_fifo_z_send[ii] = gsensordata[ii].z;\r
- // }\r
-\r
- // PRINT("hxdata:%d/%d %d %d %d %d %d %d\r\n" ,1+ii,*count,PPG_buf[ii],ir_buf[0],gsen_fifo_x[ii],gsen_fifo_y[ii],gsen_fifo_z[ii],ppg_s_data.green_cur);\r
- // }\r
-\r
- hrs_wear_status = hx3695_hrs_get_wear_status();\r
- PRINT("hrs_wear_status: %d !!\r\n", hrs_wear_status);\r
- \r
- if(hrs_wear_status == MSG_HRS_WEAR)\r
+ PRINT("*count : %d \r\n",*count);\r
+ if(*count < 10)\r
{\r
- tyhx_hrs_alg_send_data(PPG_buf, *count, gsen_fifo_x_send, gsen_fifo_y_send, \r
- gsen_fifo_z_send, cal.Group1_Ledidac);\r
+ gsensor_get_n_data(16,gsensordata);\r
+ for(ii=0; ii<*count; ii++)\r
+ {\r
+ if(ii == 8)\r
+ {\r
+ gsen_fifo_x_send[ii] = gsen_fifo_x_send[ii - 1];\r
+ gsen_fifo_y_send[ii] = gsen_fifo_y_send[ii - 1];\r
+ gsen_fifo_z_send[ii] = gsen_fifo_z_send[ii - 1];\r
+ }\r
+ else\r
+ {\r
+ gsen_fifo_x_send[ii] = (gsensordata[ii*2].x + gsensordata[2*ii + 1].x)/2;\r
+ gsen_fifo_y_send[ii] = (gsensordata[ii*2].y + gsensordata[2*ii + 1].y)/2;\r
+ gsen_fifo_z_send[ii] = (gsensordata[ii*2].z + gsensordata[2*ii + 1].z)/2;\r
+ }\r
+ PRINT("hxdata:%d/%d %d %d %d %d %d %d\r\n" ,1+ii,*count,PPG_buf[ii],ir_buf[0],gsen_fifo_x_send[ii],gsen_fifo_y_send[ii],gsen_fifo_z_send[ii],ppg_s_data.green_cur);\r
+ }\r
+\r
+ hrs_wear_status = hx3695_hrs_get_wear_status();\r
+ PRINT("hrs_wear_status: %d !!\r\n", hrs_wear_status);\r
+ \r
+ if(hrs_wear_status == MSG_HRS_WEAR)\r
+ {\r
+ tyhx_hrs_alg_send_data(PPG_buf, *count, gsen_fifo_x_send, gsen_fifo_y_send, \r
+ gsen_fifo_z_send, cal.Group1_Ledidac);\r
+ }\r
}\r
#endif\r
\r
PRINT("hx3695 data_cnt: %d, hr_living: %d, hr_living_qu: %d, hr_living_std: %d, hr_result:%d \r\n",\r
alg_results.data_cnt, hrsresult.hr_living, hrsresult.hr_living_qu, hrsresult.hr_living_std, hrsresult.lastesthrs);\r
\r
- free_trainning_hrs = hrsresult.lastesthrs;\r
- free_trainning_wearstatus = hrs_wear_status;\r
+ if(hrs_mode_state)\r
+ {\r
+ hrs_data[0] = hrsresult.lastesthrs;\r
+ hrs_data[1] = hrs_wear_status;\r
\r
+ do_cywee_service_check_msg(CYWEE_SERVICE_CMD_HRS_WEARSTATUS_CHANGE,hrs_data);\r
+ }\r
\r
if(hrsresult.lastesthrs > 0)\r
{\r
DEBUG_PRINTF("\r\n send1 jlink cnt=%d\r\n",*count); \r
\r
/*屏蔽*/\r
-// for(ii=0; ii<*count; ii++)\r
-// {\r
-// gsen_fifo_x_send[ii] = gsen_fifo_x[32-*count+ii];\r
-// gsen_fifo_y_send[ii] = gsen_fifo_y[32-*count+ii];\r
-// gsen_fifo_z_send[ii] = gsen_fifo_z[32-*count+ii];\r
-// // PRINT("hx3695 data: %d/%d %d %d %d %d %d %d\r\n" ,\r
-// // 1+ii,*count,red_buf[ii],ir_buf[ii],green_buf[ii],gsen_fifo_x[ii],gsen_fifo_y[ii],gsen_fifo_z[ii]);\r
-// // printf("FFF==>spo2 red_buf : %d, %d, %d, %d \n", 1+ii, *count, red_buf[ii], ir_buf[0]);\r
+ // for(ii=0; ii<*count; ii++)\r
+ // {\r
+ // gsen_fifo_x_send[ii] = gsen_fifo_x[32-*count+ii];\r
+ // gsen_fifo_y_send[ii] = gsen_fifo_y[32-*count+ii];\r
+ // gsen_fifo_z_send[ii] = gsen_fifo_z[32-*count+ii];\r
+ // PRINT("hxdata:%d/%d %d %d %d %d %d %d\r\n",\r
+ // 1+ii,*count,red_buf[ii],ir_buf[ii],green_buf[ii],gsen_fifo_x[ii],gsen_fifo_y[ii],gsen_fifo_z[ii]);\r
+ // //printf("FFF==>spo2 red_buf : %d, %d, %d, %d \n", 1+ii, *count, red_buf[ii], ir_buf[0]);\r
\r
\r
-// }\r
+ // }\r
\r
// ft_ppg_iir = spo2_s_dat.red_data[0];\r
// hx3695_factory_test_process(NULL, APP_FACTORY_TEST_SPO2_START, &ft_ppg_iir);\r
hx3695_wear_msg_code_t hx3695_wear_status;\r
\r
hx3695_check_touch_read(&ppg_s_data);\r
- \r
hx3695_wear_status = hx3695_check_touch_send_data(ir_buf,*count);\r
hrsresult.wearstatus = hx3695_wear_status;\r
+ if(wear_mode_status != hx3695_wear_status)\r
+ {\r
+ wear_mode_status = hx3695_wear_status;\r
+ do_cywee_service_check_msg(CYWEE_SERVICE_CMD_WEAR_STATUS_CHANGE,&wear_mode_status);\r
+ }\r
\r
extern uint8_t notouch_cnt;\r
extern uint8_t touch_cnt;\r
\r
// PRINT("===> touch_cnt: %d, notouch_cnt: %d, wear status: %d, \r\n", touch_cnt, notouch_cnt, hx3695_wear_status);\r
\r
- PRINT("hx3695_wear_ppg_Int_handle wearstatus = %d\r\n", hrsresult.wearstatus);\r
- PRINT("count : %d \r\n",*count);\r
- for(int i=0;i<*count;i++)\r
- {\r
- PRINT("%d,%d,%d,%d,%d,%d\r\n",1+i,*count,ir_buf[i],ppg_s_data.s_buf[i*2],ppg_s_data.s_buf[i*2+1],hx3695_wear_status);\r
- }\r
+ // PRINT("hx3695_wear_ppg_Int_handle wearstatus = %d\r\n", hrsresult.wearstatus);\r
+ // PRINT("count : %d \r\n",*count);\r
+ // for(int i=0;i<*count;i++)\r
+ // {\r
+ // PRINT("%d,%d,%d,%d,%d,%d\r\n",1+i,*count,ir_buf[i],ppg_s_data.s_buf[i*2],ppg_s_data.s_buf[i*2+1],hx3695_wear_status);\r
+ // }\r
}\r
#endif\r
\r
#include "tyhx_hrs_custom.h"\r
#include "hx3695.h"\r
#include "hx3695_check_touch.h"\r
-\r
+#include "hx3695_hrs_agc.h"\r
\r
\r
hx3695_wear_msg_code_t hx3695_wear_status = MSG_NO_WEAR;\r
int32_t *green_data = &(s_dat->green_data[0]);\r
int32_t *ir_buf = &(s_dat->ir_data[0]);\r
int32_t *s_buf = &(s_dat->s_buf[0]);\r
-\r
+ int32_t IR_data[8] = {0};\r
// size = hx3695_read_fifo_size();\r
// \r
// if(size<2)\r
// if (size && size <= 256)\r
// {\r
fifo_out_size = hx3695_read_fifo_data(s_buf,hrs_phase_num,2);\r
- PRINT("fifo_out_size : %d\r\n",fifo_out_size);\r
+ //PRINT("fifo_out_size : %d\r\n",fifo_out_size);\r
s_dat->count = fifo_out_size;\r
+ read_hrs_data_packet(IR_data);\r
for (i=0; i<fifo_out_size; i++)\r
{ \r
green_data[i] = (s_buf[i*3]);\r
ir_buf[i] = (s_buf[i*3+2] );\r
- TYHX_LOG("touch_green:%d/%d %d, touch_ir: %d \r\n" ,1+i,fifo_out_size,green_data[i],s_buf[i*3+2]);\r
+ //TYHX_LOG("touch_green:%d/%d %d, touch_ir: %d \r\n" ,1+i,fifo_out_size,green_data[i],s_buf[i*3+2]);\r
}\r
// }\r
return size;\r
{\r
uint8_t ii;\r
hx3695_wear_msg_code_t wear_status;\r
- if(count==0)\r
- {\r
- return wear_status;\r
- }\r
- for(ii=0; ii<count; ii++)\r
- {\r
- wear_status = check_touch_alg(ir_data[ii]);\r
- }\r
+ // if(count==0)\r
+ // {\r
+ // return wear_status;\r
+ // }\r
+ // for(ii=0; ii<count; ii++)\r
+ // {\r
+ wear_status = check_touch_alg(ir_data);\r
+ //}\r
return wear_status;\r
}\r
\r
hx3695_wear_msg_code_t check_touch_alg(int32_t ir_data)\r
{\r
- PRINT("ir_data : %d \r\n",ir_data);\r
+ ir_data = Ir_data;\r
+ //PRINT("ir_data : %d \r\n",ir_data);\r
if(ir_data>check_mode_wear_thre)\r
{\r
notouch_cnt = 0;\r
* @Author: penglei 1624952103@qq.com
* @Date: 2024-03-13 15:08:38
* @LastEditors: penglei 1624952103@qq.com
- * @LastEditTime: 2024-04-12 20:23:58
- * @FilePath: /FD230/code/sdk/drivers/peripheral/ppg/hx3695/hx3695_hal.c
+ * @LastEditTime: 2024-04-13 17:22:50
+ * @FilePath: /sdk/drivers/peripheral/ppg/hx3695/hx3695_hal.c
* @Description:
*
* Copyright (c) 2024 by ${git_name_email}, All Rights Reserved.
} else {
// ppg_service_running_stat = false;
- if(md == HRS_MODE|| md == FT_LEAK_LIGHT_MODE || md == FT_GRAY_CARD_MODE || md == FT_GRAY_CARD_MODE)
+ if(md == HRS_MODE|| md == FT_LEAK_LIGHT_MODE || md == FT_GRAY_CARD_MODE || md == WEAR_MODE)
{
#ifdef HRS_ALG_LIB
hx3695_hrs_disable();
\r
static uint8_t no_touch_cnt = 0;\r
\r
+int32_t Ir_data = 0;\r
+\r
void Init_hrs_PPG_Calibration_Routine(HRS_CAL_SET_T *calR)\r
{\r
calR->flag = CAL_FLG_LED_DR|CAL_FLG_LED_DAC|CAL_FLG_AMB_DAC|CAL_FLG_RF;\r
s_buf[6] = ((databuf4[0])|(databuf4[1]<<8)|(databuf4[2]<<16)); \r
s_buf[7] = ((databuf4[3])|(databuf4[4]<<8)|(databuf4[5]<<16));\r
\r
-// SEGGER_RTT_printf(0,"phase7_data: %d, phase8_data: %d\r\n", s_buf[6],s_buf[7]);\r
- \r
+ //PRINT("phase7_data: %d, phase8_data: %d %d\r\n", s_buf[6],s_buf[7],s_buf[7] - s_buf[6]);\r
+ Ir_data = s_buf[7] - s_buf[6];\r
}\r
\r
void read_hrs_ir_packet(int32_t *buf)\r
HRS_CAL_SET_T get_hrs_agc_status(void);\r
void hx3695_hrs_data_reset(void);\r
\r
+extern int32_t Ir_data;\r
+\r
#endif\r
#include "hx3695_hal.h"
#include "custom_utils.h"
+#include "cywee_hal.h"
+
static bool g_ppg_service_initialled = false;
uint8_t card_databuf[64] = {0};
#define PPG_SERVICE_MSG_COUNT 16
-#define PPG_SERVICE_TASK_SIZE 0x800
+#define PPG_SERVICE_TASK_SIZE 0x900
#define PPG_SERVICE_TASK_PRIO 5
#define MAG_CHECK_MS 20
uint32_t ppg_resume(void);
void get_hrs_wearstatus(uint8_t *hrs,uint8_t *wearstatus);
-
+void get_wearstatus(uint8_t *wearstatus);
typedef enum {
PPG_TEST_MODE_HRS,
PPG_TEST_MODE_SPO2,