Code review from 彭磊
* refs/changes/1140/head: (26 commits squashed)
- 修改小睡数据合并成一个文件
- 修改小睡数据存入一个文件(默认关闭 待协议调通)
- Merge branch 'sdk602patch0626' of https://codeup.aliyun.com/
64191456b9581d62e8f81ac0/FD230 into sdk602patch0626
- Merge branch 'sdk602patch0626' of https://codeup.aliyun.com/
64191456b9581d62e8f81ac0/FD230 into sdk602patch0626
- Merge branch 'sdk602patch0626' of https://codeup.aliyun.com/
64191456b9581d62e8f81ac0/FD230 into sdk602patch0626
- Merge branch 'sdk602patch0626' of https://codeup.aliyun.com/
64191456b9581d62e8f81ac0/FD230 into sdk602patch0626
- Merge branch 'sdk602patch0626' of https://codeup.aliyun.com/
64191456b9581d62e8f81ac0/FD230 into sdk602patch0626
- Merge branch 'sdk602patch0626' of https://codeup.aliyun.com/
64191456b9581d62e8f81ac0/FD230 into sdk602patch0626
- Merge branch 'sdk602patch0626' of https://codeup.aliyun.com/
64191456b9581d62e8f81ac0/FD230 into sdk602patch0626
- debug界面添加睡眠数据以及睡眠状态runtime,更新cywee算法库修复配速BUG,优化睡眠模式alarm逻辑
- 修改gsensor FIFO笔数为15笔 并同步运动心率修改
- Merge branch 'sdk602patch0626' of https://codeup.aliyun.com/
64191456b9581d62e8f81ac0/FD230 into sdk602patch0626
- 回退alarm 睡眠闹钟修改
- Merge branch 'sdk602patch0626' of https://codeup.aliyun.com/
64191456b9581d62e8f81ac0/FD230 into sdk602patch0626
- Merge branch 'sdk602patch0626' of https://codeup.aliyun.com/
64191456b9581d62e8f81ac0/FD230 into sdk602patch0626
- Merge branch 'sdk602patch0626' of https://codeup.aliyun.com/
64191456b9581d62e8f81ac0/FD230 into sdk602patch0626
- 修改心率数据消息为1秒1次,优化省电模式蓝牙开关逻辑
- Merge branch 'sdk602patch0626' of https://codeup.aliyun.com/
64191456b9581d62e8f81ac0/FD230 into sdk602patch0626
- Merge branch 'sdk602patch0626' of https://codeup.aliyun.com/
64191456b9581d62e8f81ac0/FD230 into sdk602patch0626
- Merge branch 'sdk602patch0626' of https://codeup.aliyun.com/
64191456b9581d62e8f81ac0/FD230 into sdk602patch0626
- Merge branch 'sdk602patch0626' of https://codeup.aliyun.com/
64191456b9581d62e8f81ac0/FD230 into sdk602patch0626
- 修改ble连接参数,降低ble连接功耗
- Merge branch 'sdk602patch0626' of https://codeup.aliyun.com/
64191456b9581d62e8f81ac0/FD230 into sdk602patch0626
- br连接以后关闭brscan 降低功耗
- 添加退出省电模式自动回连
- 优化心率检测未佩戴消息上报逻辑并加快上报速度
Signed-off-by: aliyun6865282430 <1624952103@qq.com>
Reviewed-by: snickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
Merged-by: snickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
link: https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230/change/1140
{\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BtGapPairStatusChangedCallback addr: ****%02x%02x%02x%02x status: %d\n",\r
bdAddr->addr[3], bdAddr->addr[2], bdAddr->addr[1], bdAddr->addr[0], status); /* addr下标 0 1 2 3 */\r
- memcpy(&BtGapPair_bdAddr,bdAddr,sizeof(bd_addr_t));\r
- // if(status == GAP_PAIR_PAIRED)\r
- // { \r
- \r
- \r
- // }\r
- // uapi_a2dp_snk_connect();\r
- // a2dp_snk_connect(bdAddr);\r
- if(cm_custom_ble_service_on_flag() && !get_ble_pair()&& (status == GAP_PAIR_PAIRED))\r
+\r
+ if ((gap_get_device_class(bdAddr) & 0x200) != 0) \r
{\r
- send_pair_succ((bd_addr_t*)bdAddr);\r
- // if(cm_get_A2DP_switch() || cm_get_HFP_switch())\r
- // uapi_a2dp_snk_connect();\r
- hand_watch_first_time_Paired();\r
- svr_ble_adv_stop();\r
- //uapi_reconnect();\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "uapi_a2dp_snk_connect");\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BtGapPairStatusChangedCallback: Mobile Phone Device");\r
+ if(status==GAP_PAIR_PAIRED)\r
+ memcpy(&BtGapPair_bdAddr,bdAddr,sizeof(bd_addr_t));\r
+\r
+ if(cm_custom_ble_service_on_flag() && !get_ble_pair()&& (status == GAP_PAIR_PAIRED))\r
+ {\r
+ send_pair_succ((bd_addr_t*)bdAddr);\r
+ hand_watch_first_time_Paired();\r
+ svr_ble_adv_stop();\r
+ //uapi_reconnect();\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "uapi_a2dp_snk_connect");\r
+ }\r
+ if(status == GAP_PAIR_PAIRED)\r
+ {\r
+ set_br_pair();\r
+ }\r
}\r
+\r
\r
\r
if (status == GAP_PAIR_PAIRED) {\r
- set_br_pair();\r
+ \r
if (ConnectPhonePresenter::GetInstance() != nullptr) {\r
NativeAbility::GetInstance().ChangeSlice(VIEW_SETTING);\r
}\r
\r
static uint8_t ALC_connect_A2DP_flag=0;\r
\r
+static bd_addr_t ACL_bdAdd;\r
+\r
+void uapi_set_ACL_br_address(const bd_addr_t * bdAddr)\r
+{\r
+ memcpy(&ACL_bdAdd,bdAddr,sizeof(bd_addr_t));\r
+}\r
+\r
// 回调:ACL连接状态上报\r
void GapAclStateChangedCallback(const bd_addr_t *bdAddr, gap_acl_state_t state, unsigned int reason)\r
{\r
gap_disconnect_remote_device(bdAddr);\r
}\r
\r
- //ALC_State_flag=state;\r
-\r
- // if(ALC_connect_hfp_flag && state==GAP_ACL_STATE_CONNECTED)\r
- // {\r
- // int ret= hfp_hf_connect(bdAddr);\r
- // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bt hfp_hf_connect ret %X", ret);\r
- // ALC_connect_hfp_flag=0;\r
- // }\r
-\r
- // if(ALC_connect_A2DP_flag && state==1)\r
- // {\r
- // // int ret= hfp_hf_connect(bdAddr);\r
- // // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bt hfp_hf_connect ret %X", ret);\r
- // uapi_a2dp_snk_connect();\r
- // ALC_connect_A2DP_flag=0;\r
- // }\r
-\r
if ((gap_get_device_class(bdAddr) & 0x200) != 0) {\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GapAclStateChangedCallback: Mobile Phone Device");\r
if (state == GAP_ACL_STATE_DISCONNECTED) {\r
/* 通知msg_center,ble状态仍用bt状态,此处不区分 */\r
SendMsgToMsgCenterService(BT_DISCONNECTED_TO_MSGCENTER, 0, nullptr, 0);\r
SendMsgToUIService(BT_DISCONNECTED_TO_UI, 0, nullptr, 0);\r
+\r
+ \r
+\r
+ gap_br_set_bt_scan_mode(GAP_SCAN_MODE_CONNECTABLE, 0);\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GAP_SCAN_MODE_CONNECTABLE");\r
+\r
} else if (state == GAP_ACL_STATE_CONNECTED) {\r
SendMsgToMsgCenterService(BT_CONNECTED_TO_MSGCENTER, 0, nullptr, 0);\r
SendMsgToUIService(BT_CONNECTED_TO_UI, 0, nullptr, 0);\r
+\r
+ uapi_set_ACL_br_address(bdAddr);\r
+\r
+ gap_br_set_bt_scan_mode(GAP_SCAN_MODE_NONE, 0);\r
+\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GAP_SCAN_MODE_NONE");\r
+\r
}\r
return;\r
}\r
SendMsgToUIService(BT_DISCONNECTED_TO_UI, 0, nullptr, 0);\r
SendMsgToMsgCenterService(BT_DISCONNECTED_TO_MSGCENTER, 0, nullptr, 0);\r
}\r
+\r
+\r
}\r
else if (conn_state==PROFILE_STATE_CONNECTING || conn_state==PROFILE_STATE_CONNECTED)\r
{\r
{\r
printf("gap_scan_mode_changed_callback mode: %d\n", mode);\r
\r
+ if ((gap_get_device_class(&ACL_bdAdd) & 0x200) != 0) \r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "sample_gap_scan_mode_changed_callback: Mobile Phone Device");\r
+ if(bt_is_acl_connected(&ACL_bdAdd) && mode!=GAP_SCAN_MODE_NONE)\r
+ {\r
+ gap_br_set_bt_scan_mode(GAP_SCAN_MODE_NONE, 0);\r
+ }\r
+ }\r
+ \r
+ \r
}\r
\r
void BtInitCallBacks(void)\r
\r
uint32_t GetCheckTime(void);\r
void SetCheckTime(uint32_t time);\r
- void SetWearStatus(int32_t wear);\r
+ void SetWearStatus();\r
void SetResult(HeartResult result);\r
HeartResult GetResult();\r
\r
break;\r
}\r
}\r
-void HeartModel::SetWearStatus(int32_t wear) {\r
- // 设置佩戴状态\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "HeartModel Weartest::%d", wear);\r
-\r
- // 计数更新\r
- if (wear_ != 1 && wear != 1) {\r
- unwear_counter_++; // 佩戴错误计时器计数\r
- } else {\r
- unwear_counter_ = 0; // 佩戴正常情况下清零计数器\r
- }\r
- wear_ = wear;\r
- // 检查是否达到了最大未佩戴计数限制\r
- if (unwear_counter_ >= MAX_UNWEAR_COUNT) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,\r
- "检测结果:未佩戴计数最大 unwear_counter:%d", unwear_counter_);\r
+ void HeartModel::SetWearStatus()\r
+ {\r
+ // 如果处于训练模式,提前返回\r
+ if (uapi_dev_runtime_get_train_status() == 1)\r
+ return;\r
+ // 设置佩戴状态\r
SetResult(HeartResult::NOT_WORN);\r
Heart_Stop();\r
- }\r
-}\r
+ } \r
\r
void HeartModel::UpHeartdata(uint16_t heart) {\r
// 如果处于训练模式,提前返回\r
}\r
display_counter_++;\r
}\r
+ else\r
+ {\r
+ displayheart = 0;\r
+ }\r
+\r
\r
// 更新心率和计数器\r
if (displayheart != 0) {\r
sendBuf[17] = set_ok;\r
sendBuf[18] = Calculate_CRC(sendBuf,18);\r
sendBleData(sendBuf,19);\r
+ uapi_ble_connect_param_update(50);\r
}\r
else\r
{\r
else \r
{\r
devpair_state = 0;//\r
- \r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "exit_alipay_gui !!! %d",exit_alipay_gui);\r
+\r
\r
if( g_ble_conn_id !=0 && conn_id!=g_ble_conn_id)\r
{\r
\r
\r
Bleconnect = GAP_BLE_STATE_CONNECTED;//蓝牙已连接\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GAP_BLE_STATE_CONNECTED!!! 0x%x\r\n",pair_state); \r
+ // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GAP_BLE_STATE_CONNECTED!!! 0x%x\r\n",pair_state); \r
+\r
+ // gap_conn_param_update_t conn_param = { 0 };\r
+ // conn_param.conn_handle = conn_id; /* param 0: conn_handle */\r
+ // conn_param.interval_min =50; /* param 1: interval_min */\r
+ // conn_param.interval_max = 50; /* param 2: interval_max */\r
+ // conn_param.slave_latency = 6; /* param 3: slave_latency */\r
+ // conn_param.timeout_multiplier = 700; /* param 4: timeout_multiplier */\r
+ // ret = gap_ble_connect_param_update(&conn_param);\r
+ // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"gap ble update connection parameters ret: %X\n", ret); \r
+\r
}\r
\r
uapi_dev_runtime_set_ble_connect_stat(Bleconnect);\r
}\r
\r
+void uapi_ble_connect_param_update(uint16_t data)\r
+{\r
+ gap_conn_param_update_t conn_param = { 0 };\r
+ conn_param.conn_handle = g_ble_conn_id; /* param 0: conn_handle */\r
+ conn_param.interval_min =data; /* param 1: interval_min */\r
+ conn_param.interval_max = data; /* param 2: interval_max */\r
+ conn_param.slave_latency = 6; /* param 3: slave_latency */\r
+ conn_param.timeout_multiplier = 700; /* param 4: timeout_multiplier */\r
+ int ret = gap_ble_connect_param_update(&conn_param);\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"gap ble update connection parameters ret: %X\n", ret); \r
+}\r
void svr_pair_result_cbt_cb(uint16_t conn_id, const bd_addr_t *addr, errcode_t status)\r
{\r
devpair_state = 1;//代表配对成功了\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"gap ble update connection parameters ret: %u\n", ret); \r
}\r
}\r
+ // uint16_t interval; /*!< @if Eng interval\r
+ // @else 链路调度间隔,单位slot @endif */\r
+ // uint16_t latency; /*!< @if Eng latency\r
+ // @else 延迟周期,单位slot @endif */\r
+ // uint16_t timeout; /*!< @if Eng timeout\r
+ // @else 超时时间,单位10ms @endif */\r
+void srv_gap_ble_connect_param_update_callback(uint16_t conn_id, errcode_t status,\r
+ const gap_ble_conn_param_update_t *param)\r
+{\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, \r
+ "conn_id %d status %d gap_ble_conn_param_update_t interval %d latency%d timeout %d ",conn_id,status,param->interval,param->latency,param->timeout);\r
+}\r
+\r
+\r
\r
//添加ota特征值\r
static void srv_ble_add_chart_decr_ota(uint8_t server_id,uint16_t srv_handle)\r
g_ble_gapble_cbs.auth_complete_cb = svr_gap_ble_auth_complete_callback;\r
g_ble_gapble_cbs.start_adv_cb=svr_ble_adv_start_cb;\r
g_ble_gapble_cbs.stop_adv_cb=svr_ble_adv_stop_cb;\r
- \r
+ g_ble_gapble_cbs.conn_param_update_cb=srv_gap_ble_connect_param_update_callback;\r
#ifndef SUPPORT_AT_OHOSFWK\r
gap_ble_register_callbacks(&g_ble_gapble_cbs);\r
#else\r
void get_adv_data(char *data);
+void uapi_ble_connect_param_update(uint16_t data);
+
+
#ifdef __cplusplus
}
#endif
if(uapi_dev_runtime_get_train_status())
return;
int32_t wear = *((int32_t*)(req->data)); // 进行类型转换
+ if(!wear)
+ {
+ HeartModel::GetInstance()->SetWearStatus();
+ }
BloodOxygenModel::GetInstance()->SetWearStatus(wear);
- HeartModel::GetInstance()->SetWearStatus(wear);
+
}
}
//血氧
do_cywee_service_check_msg(CYWEE_SERVICE_CMD_WEAR_STATUS_CHANGE,&cywee_data);\r
}\r
}\r
+ //脱腕上报未佩戴信息\r
+void hx3695_unwearstatus_update(void)\r
+{\r
+ hx3695_msg_callback_t func = hx3695_get_send_msg_callback_func();\r
+ if(func != NULL)\r
+ {\r
+ hrsresult.lastesthrs = 0;\r
+ hrsresult.wearstatus = 0;\r
+\r
+ func(HX3695_MSG_TYPE_HRS_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t));\r
+ func(HX3695_MSG_TYPE_WEARSTAT_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t));\r
+ }\r
+\r
+ if(uapi_dev_runtime_get_train_status())\r
+ {\r
+ cywee_wear_status = 0;\r
+ hx3695_wearstatus_update();\r
+ cywee_data = 0;\r
+ do_cywee_service_check_msg(CYWEE_SERVICE_CMD_HRS_CHANGE,&cywee_data);\r
+ }\r
+} \r
+\r
\r
#ifdef HRS_ALG_LIB\r
/*TYHX 心率模式下 读取PPG, 默认320ms*/\r
hrs_sensor_data_t hrs_s_dat;\r
//hx3695_results_t alg_results_pre;\r
\r
+static uint8_t his_wear = 2;\r
+static uint8_t wear_cnt = 0;\r
+\r
void hx3695_hrs_ppg_Int_handle(void)\r
{\r
uint8_t ii=0;\r
hrsresult.lastesthrs = 0;\r
cywee_wear_status = 0;\r
}\r
- PRINT("hrsresult.wearstatus : %d , cywee_wear_status : %d , hr_living : %d \n",hrsresult.wearstatus,cywee_wear_status,hrsresult.hr_living);\r
+\r
+ \r
+ hx3695_msg_callback_t func = hx3695_get_send_msg_callback_func();\r
+ if(func != NULL)\r
+ {\r
+ if(his_wear == hrsresult.wearstatus)\r
+ {\r
+ wear_cnt++;\r
+ if(wear_cnt >= 2 && !his_wear) //未佩戴超过2次 上报未佩戴信息\r
+ {\r
+ func(HX3695_MSG_TYPE_WEARSTAT_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t));\r
+ wear_cnt = 0;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ his_wear = hrsresult.wearstatus;\r
+ wear_cnt = 0;\r
+ }\r
+ }\r
+ //PRINT("hrsresult.wearstatus : %d , his_wear : %d , wear_cnt : %d \n",hrsresult.wearstatus,his_wear,wear_cnt);\r
+ //PRINT("hrsresult.wearstatus : %d , cywee_wear_status : %d , hr_living : %d \n",hrsresult.wearstatus,cywee_wear_status,hrsresult.hr_living);\r
// if(hrs_wear_status == MSG_HRS_WEAR && hrsresult.hr_living == MSG_LIVING_TRUE)\r
// {\r
// if(hrsresult.lastesthrs > 30 && hrsresult.lastesthrs < 220)\r
// }\r
\r
msg_count++;\r
- if(msg_count == 3)\r
+ if(msg_count >= 3)\r
{\r
msg_count = 0;\r
- hx3695_msg_callback_t func = hx3695_get_send_msg_callback_func();\r
if(func != NULL)\r
{\r
- PRINT("hrsresult.lastesthrs : %d \n",hrsresult.lastesthrs);\r
+ //PRINT("hrsresult.lastesthrs : %d \n",hrsresult.lastesthrs);\r
func(HX3695_MSG_TYPE_HRS_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t));\r
if(uapi_get_cywee_static_state())\r
{\r
func(HX3695_MSG_TYPE_STATIC_HRS_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t));\r
}\r
- func(HX3695_MSG_TYPE_WEARSTAT_UPDATE,&hrsresult,sizeof(FT_CUSTOM_RESULTS_t));\r
}\r
\r
if(uapi_dev_runtime_get_train_status())\r
void wear_mode_timeout_handler(void * p_context);\r
void Efuse_Mode_Check(void);\r
void hx3695_wearstatus_update(void);\r
+void hx3695_unwearstatus_update(void);\r
#include "hx3695_hal.h"\r
\r
#endif\r
{\r
AGC_LOG("run here_low_pow!! \r\n");\r
hx3695_hrs_low_power();\r
- \r
- \r
+ hx3695_unwearstatus_update();//上报未佩戴信息\r
}\r
else if(hrs_wear_status_pre == MSG_HRS_WEAR)\r
{\r
\r
case hrsCalLed: \r
\r
- if(g1_led>900000 && calR->Group1_Ledidac<= 55)\r
+ // if(g1_led>900000 && calR->Group1_Ledidac<= 55)//andy\r
+ if(g1_led>900000 && calR->Group1_Ledidac<= 115)//andy\r
{\r
calR->Group1_Ledidac = calR->Group1_Ledidac + 6;\r
} \r
- if(g2_led>900000 && calR->Group2_Ledidac<= 55)\r
+ // if(g2_led>900000 && calR->Group2_Ledidac<= 55)//andy\r
+ if(g2_led>900000 && calR->Group2_Ledidac<= 115)//andy\r
{\r
calR->Group2_Ledidac = calR->Group2_Ledidac + 6; \r
} \r
default:\r
break; \r
}\r
- AGC_LOG("AGC111: led_drv=%d,ledDac=%d,ambDac=%d,ledstep=%d,rf=%d,state = %d\r\n",\\r
- calR->Group1_Cur, calR->Group1_Ledidac, calR->Group1_AMBDAC,calR->Group1_step,calR->Group1_RF,calR->state);\r
- AGC_LOG("AGC222: led_drv=%d,ledDac=%d,ambDac=%d,ledstep=%d,rf=%d,state = %d\r\n",\\r
- calR->Group2_Cur, calR->Group2_Ledidac, calR->Group2_AMBDAC,calR->Group2_step,calR->Group2_RF,calR->state);\r
+ AGC_LOG("AGC111: led_drv=%d,ledDac=%d,ambDac=%d,ledstep=%d,rf=%d,state = %d led1=%d\r\n",\\r
+ calR->Group1_Cur, calR->Group1_Ledidac, calR->Group1_AMBDAC,calR->Group1_step,calR->Group1_RF,calR->state,g1_led);\r
+ AGC_LOG("AGC222: led_drv=%d,ledDac=%d,ambDac=%d,ledstep=%d,rf=%d,state = %d led2=%d\r\n",\\r
+ calR->Group2_Cur, calR->Group2_Ledidac, calR->Group2_AMBDAC,calR->Group2_step,calR->Group2_RF,calR->state,g2_led);\r
// AGC_LOG("AGC333: led_drv=%d,ledDac=%d,ambDac=%d,ledstep=%d,rf=%d,state = %d\r\n",\\r
// calR->Group3_Cur, calR->Group3_Ledidac, calR->Group3_AMBDAC,calR->Group3_step,calR->Group3_RF,calR->state);\r
}\r
// //开广播
if(cm_custom_ble_service_on_flag())
uapi_open_br_scan();
+ //根据配置自动回连
+ if(uapi_dev_runtime_get_bt_powerstat() && (cm_get_HFP_switch() || cm_get_A2DP_switch()))
+ {
+ uapi_hfp_connect();
+ }
//打开cat1
if(cm_poweron_cat1_on_bootup_flag())
uapi_set4GCapability(true);