#define ENABLE_PRINT_ECG_EVENT_DATA (1)\r
#define ENABLE_PRINT_TOUCH_EVENT_DATA (1)\r
\r
+#define FILEPATH "user/userdata/bp_cali_data.bin"\r
\r
\r
//============================================================================\r
static uint8_t ret_hrv = 0;\r
static uint8_t ret_wear = 0;\r
static ecg_data_out _ecg_data_out_alg;\r
+\r
+static uint8_t bp_cali_cnt = 0;\r
//void demo_pah831x(void);\r
\r
static bool sensor_basic_verification(main_state *this, pah_plat *plat);\r
static uint8_t calibration_mode = ECG_PPG_BP_ESTIMATE;\r
\r
// 2. 固定基准参数:静态常量,全程不变\r
-static const uint8_t user_age = 24;\r
-static const float user_height = 173;\r
+static uint8_t user_age = 24;\r
+static uint16_t user_height = 173;\r
static uint16_t Benchmark_SBP = 135;\r
static uint16_t Benchmark_DBP = 85;\r
\r
\r
}else if(calibration_mode==ECG_PPG_BP_ESTIMATE)\r
{\r
+\r
+ pah831x_read_calidata();\r
+\r
//bp_cal_ready = get_bp_cal_data(cali_value);\r
bp_cal_ready = true ;//read from flash\r
- cali_value[0] = 26 ;//read from flash\r
- cali_value[1] = 9 ;//read from flash\r
- cali_value[2] = 29 ;//read from flash\r
- cali_value[3] = 86 ;//read from flash\r
- cal_sbp_in = cali_value[0];\r
- cal_dbp_in = cali_value[1];\r
- CalValue_in = cali_value[2];\r
- CalValue1_in = cali_value[3];\r
+ // cali_value[0] = 26 ;//read from flash\r
+ // cali_value[1] = 9 ;//read from flash\r
+ // cali_value[2] = 29 ;//read from flash\r
+ // cali_value[3] = 86 ;//read from flash\r
+ // cal_sbp_in = cali_value[0];\r
+ // cal_dbp_in = cali_value[1];\r
+ // CalValue_in = cali_value[2];\r
+ // CalValue1_in = cali_value[3];\r
got_BP = 0 ;\r
Benchmark_SBP = 0 ;\r
Benchmark_DBP = 0 ;\r
{\r
pah_sensor_stop();\r
ecg_bp_algorithm_close();\r
+\r
+ if(calibration_mode == ECG_PPG_BP_CALI)\r
+ {\r
+ pah831x_save_calidata();\r
+ }\r
}\r
\r
void pah831x_ecg_afib_stop(void)\r
uint8_t pah831x_get_wear_status(void)\r
{\r
return ret_wear;\r
+}\r
+\r
+void pah831x_set_bp_cali_data(int *sbp,int *dbp)\r
+{\r
+ if(sbp == NULL || dbp == NULL)\r
+ return;\r
+\r
+ Benchmark_SBP = *sbp;\r
+ Benchmark_DBP = *dbp;\r
+\r
+ int user_info[5] = {0};\r
+ get_user_info_from_config_model(user_info);\r
+ user_age = user_info[0];\r
+ user_height = user_info[3];\r
+\r
+ // int user_info[5] = {0};\r
+ // get_user_info_from_config_model(user_info);\r
+ // memset(&scl, 0, sizeof(scl));\r
+ // scl.iData[0] = 1;\r
+ // scl.iData[1] = user_info[0];\r
+ // scl.iData[2] = !user_info[1]; //APP 1女 0男\r
+ // scl.iData[3] = user_info[2];\r
+ // scl.iData[4] = user_info[3];\r
+ // scl.iData[5] = user_info[4];\r
+ // CWM_OS_dbgPrintf("set user info : age[%d] , sex[%d] , weight[%d] , height[%d] , method[%d] \r\n",\r
+ // user_info[0],user_info[1],user_info[2],user_info[3],user_info[4]);\r
+}\r
+\r
+void pah831x_read_calidata(void)\r
+{\r
+ // C89 规范:所有变量定义在函数开头\r
+ int cali_data[5] = {0};\r
+ FILE *fp = NULL;\r
+ size_t ret = 0;\r
+\r
+ fp = fopen(FILEPATH, "rb"); // 二进制读取,嵌入式/跨平台更安全\r
+ if (fp == NULL)\r
+ {\r
+ printf("%s fopen failed\n", FILEPATH);\r
+\r
+ cal_sbp_in = 26 ;//read from flash\r
+ cal_dbp_in = 9 ;//read from flash\r
+ CalValue_in = 29 ;//read from flash\r
+ CalValue1_in = 86 ;//read from flash\r
+\r
+ return;\r
+ }\r
+\r
+ // 读取数据,并检查是否读取成功(必须判断返回值)\r
+ ret = fread(cali_data, sizeof(cali_data), 1, fp);\r
+ fclose(fp); // 先关闭文件,再判断结果\r
+\r
+ // 读取失败:直接返回,不覆盖有效数据\r
+ if (ret != 1)\r
+ {\r
+ printf("read cali data failed!\n");\r
+\r
+ cal_sbp_in = 26 ;//read from flash\r
+ cal_dbp_in = 9 ;//read from flash\r
+ CalValue_in = 29 ;//read from flash\r
+ CalValue1_in = 86 ;//read from flash\r
+\r
+ return;\r
+ }\r
+\r
+ // 数据赋值\r
+ cal_sbp_in = cali_data[0];\r
+ cal_dbp_in = cali_data[1];\r
+ CalValue_in = cali_data[2];\r
+ CalValue1_in = cali_data[3];\r
+ bp_cali_cnt = cali_data[4];\r
+\r
+ printf("read cali data success\n");\r
+}\r
+\r
+/**\r
+ * @brief 保存血压校准数据\r
+ */\r
+void pah831x_save_calidata(void)\r
+{\r
+\r
+ if(!cal_sbp_in && !cal_dbp_in && !CalValue_in && !CalValue1_in)\r
+ {\r
+ printf("error cali param!\n");\r
+ return;\r
+ }\r
+\r
+ // C89 规范:所有变量定义在函数开头\r
+ int cali_data[5] = {0};\r
+ FILE *fp = NULL;\r
+ size_t ret = 0;\r
+\r
+ // 填充校准数据\r
+ cali_data[0] = cal_sbp_in;\r
+ cali_data[1] = cal_dbp_in;\r
+ cali_data[2] = CalValue_in;\r
+ cali_data[3] = CalValue1_in;\r
+ cali_data[4] = ++bp_cali_cnt; // 先保存当前计数值\r
+\r
+ fp = fopen(FILEPATH, "wb"); // 二进制写入,避免文本模式转义\r
+ if (fp == NULL)\r
+ {\r
+ printf("%s fopen failed\n", FILEPATH);\r
+ return;\r
+ }\r
+\r
+ // 写入数据,并检查是否成功\r
+ ret = fwrite(cali_data, sizeof(cali_data), 1, fp);\r
+ fclose(fp);\r
+\r
+ if (ret != 1)\r
+ {\r
+ printf("save cali data failed!\n");\r
+ return;\r
+ }\r
+\r
+}\r
+\r
+bool is_pah831x_need_cali(void)\r
+{\r
+ pah831x_read_calidata();\r
+\r
+ return bp_cali_cnt >= 10 ? 0 : 1;\r
}
\ No newline at end of file