#endif
}
-void ppg_get_ecg_afib(uint8_t *ecg_hr, uint8_t *afib_result)
+void ppg_get_ecg_afib(uint8_t *ecg_hr, uint8_t *afib_result, uint8_t *status)
{
if (ecg_hr != NULL) {
*ecg_hr = 0;
if (afib_result != NULL) {
*afib_result = PPG_ECG_AFIB_RESULT_INVALID;
}
+ if (status != NULL) {
+ *status = PPG_ECG_AFIB_STATUS_IDLE;
+ }
#if defined PPG_PAH831X
- pah831x_get_ecg_afib(ecg_hr, afib_result);
+ pah831x_get_ecg_afib(ecg_hr, afib_result, status);
#endif
}
* 开始/停止 ecgbp、ecgafib、ecgraw 时驱动内部自动清缓冲。 */
uint32_t ppg_read_ecg_raw(int32_t *buf, uint32_t buf_len);
+#define PPG_ECG_AFIB_STATUS_IDLE 0 /* 未开始测量 */
+#define PPG_ECG_AFIB_STATUS_MEASURING 1 /* 测量中 */
+#define PPG_ECG_AFIB_STATUS_FAILED 2 /* 测量失败(ready sqi>0 停测、超时等) */
+#define PPG_ECG_AFIB_STATUS_SUCCESS 3 /* 测量成功,已出结论 */
+
/* 获取 ECG 房颤测试结果。
* ecg_hr: ECG 心率(bpm),测量过程中持续更新;
- * afib_result: æ\88¿é¢¤ç»\93论ï¼\8cæµ\8bè¯\95æ\9cªå®\8cæ\88\90时为 0xFF
+ * afib_result: æ\88¿é¢¤ç»\93论ï¼\8cæ\9cªå¼\80å§\8b/æµ\8bé\87\8fä¸/失败时为 0xFF
* 0 窦性心律 1 不确定(不规则) 2 可能房颤
- * 3 不确定(信号/特征) 4 心率过低 5 心率过高 */
-void ppg_get_ecg_afib(uint8_t *ecg_hr, uint8_t *afib_result);
+ * 3 不确定(信号/特征) 4 心率过低 5 心率过高
+ * status: 0 未开始 1 测量中 2 测量失败 3 测量成功(已出结论) */
+void ppg_get_ecg_afib(uint8_t *ecg_hr, uint8_t *afib_result, uint8_t *status);
#define PPG_ECG_BP_STATUS_MEASURING 0 /* 测量中 */
#define PPG_ECG_BP_STATUS_WEAK_SIGNAL 1 /* ECG已停止,疑似信号弱,请重新测试 */
static uint8_t AFIB_ReadyFlag = 0;\r
static uint8_t ecg_afib_result = PAH_ECG_AFIB_RESULT_INVALID;\r
static uint8_t ecg_afib_hr = 0;\r
+static uint8_t has_ecg_stop = 0;\r
static uint16_t ecg_ready_count = 0;\r
static int32_t ecg_frame_count = 0;\r
\r
}else {\r
if(PXIAFIB_GETEcgStopFlag(_state.pxialg_state_afib) == 1) {//ready sqi > 0, need to stop .\r
_state.has_got_AFIB=1;\r
+ has_ecg_stop = 1;\r
ecg_afib_algorithm_close();\r
ALG_PRINT("ready sqi > 0, need to stop \n");\r
return 1;\r
AFIB_ReadyFlag = 0;\r
ecg_afib_result = PAH_ECG_AFIB_RESULT_INVALID;\r
ecg_afib_hr = 0;\r
+ has_ecg_stop = 0;\r
_state.has_got_AFIB=0;\r
_state.has_time_out=0;\r
_state.pxialg_data.frame_count = 0 ;\r
{\r
return ecg_afib_hr;\r
}\r
+\r
+uint8_t pah_ecg_afib_get_status(void)\r
+{\r
+#if defined(ENABLE_PXI_ALG_ECG_AFIB)\r
+ if (!_state.has_got_AFIB) {\r
+ if (_state.pxialg_has_init) {\r
+ return PAH_ECG_AFIB_STATUS_MEASURING;\r
+ }\r
+ return PAH_ECG_AFIB_STATUS_IDLE;\r
+ }\r
+ if (_state.has_time_out || has_ecg_stop ||\r
+ ecg_afib_result == PAH_ECG_AFIB_RESULT_INVALID) {\r
+ return PAH_ECG_AFIB_STATUS_FAILED;\r
+ }\r
+ return PAH_ECG_AFIB_STATUS_SUCCESS;\r
+#else\r
+ return PAH_ECG_AFIB_STATUS_IDLE;\r
+#endif\r
+}\r
\r
#define PAH_ECG_AFIB_RESULT_INVALID 0xFF\r
\r
+#define PAH_ECG_AFIB_STATUS_IDLE 0 /* 未开始测量 */\r
+#define PAH_ECG_AFIB_STATUS_MEASURING 1 /* 测量中 */\r
+#define PAH_ECG_AFIB_STATUS_FAILED 2 /* 测量失败(ready sqi>0需停止、超时等) */\r
+#define PAH_ECG_AFIB_STATUS_SUCCESS 3 /* 测量成功,afib_result 已有效 */\r
+\r
uint8_t pah_ecg_afib_get_hr(void);\r
uint8_t pah_ecg_afib_get_result(void);\r
+uint8_t pah_ecg_afib_get_status(void);\r
\r
\r
#endif // header guard\r
static uint8_t ret_hrv = 0;\r
static uint8_t ret_ecg_afib_hr = 0;\r
static uint8_t ret_ecg_afib_result = PAH_ECG_AFIB_RESULT_INVALID;\r
+static uint8_t ret_ecg_afib_status = PAH_ECG_AFIB_STATUS_IDLE;\r
static uint8_t ret_ecg_bp_status = PAH_ECG_BP_STATUS_MEASURING;\r
static uint8_t ret_wear = 0;\r
static ecg_data_out _ecg_data_out_alg;\r
\r
ret_ecg_afib_hr = pah_ecg_afib_get_hr();\r
ret_ecg_afib_result = pah_ecg_afib_get_result();\r
+ ret_ecg_afib_status = pah_ecg_afib_get_status();\r
\r
clear_ecg_data_ready();\r
}\r
{\r
ret_ecg_afib_hr = 0;\r
ret_ecg_afib_result = PAH_ECG_AFIB_RESULT_INVALID;\r
+ ret_ecg_afib_status = PAH_ECG_AFIB_STATUS_MEASURING;\r
+ ecg_afib_algorithm_init();\r
pah831x_sensor_init();\r
pah831x_sensor_start(PAH831X_WORK_POLLING ,PAH831X_INIT_ALWAYS_RUN,PAH831X_PPG_REG_SETTING_IDLE ,PAH831X_ECG_REG_SETTING_1,256,3.91f );\r
- ecg_afib_algorithm_init();\r
-\r
}\r
\r
\r
{\r
pah_sensor_stop();\r
ecg_afib_algorithm_close();\r
+ ecg_afib_algorithm_init();\r
+\r
+ ret_ecg_afib_hr = 0;\r
+ ret_ecg_afib_result = PAH_ECG_AFIB_RESULT_INVALID;\r
+ ret_ecg_afib_status = PAH_ECG_AFIB_STATUS_IDLE;\r
}\r
\r
void pah831x_stress_stop(void)\r
ret_wear = 0;\r
ret_ecg_afib_hr = 0;\r
ret_ecg_afib_result = PAH_ECG_AFIB_RESULT_INVALID;\r
+ ret_ecg_afib_status = PAH_ECG_AFIB_STATUS_IDLE;\r
ret_ecg_bp_status = PAH_ECG_BP_STATUS_MEASURING;\r
history_wear_status = -1;\r
\r
return ret_hrv;\r
}\r
\r
-void pah831x_get_ecg_afib(uint8_t *ecg_hr, uint8_t *afib_result)\r
+void pah831x_get_ecg_afib(uint8_t *ecg_hr, uint8_t *afib_result, uint8_t *status)\r
{\r
if (ecg_hr != NULL) {\r
*ecg_hr = ret_ecg_afib_hr;\r
if (afib_result != NULL) {\r
*afib_result = ret_ecg_afib_result;\r
}\r
+ if (status != NULL) {\r
+ *status = ret_ecg_afib_status;\r
+ }\r
}\r
\r
void pah831x_get_ecg_bp(int *sbp, int *dbp, uint8_t *status)\r
\r
uint8_t pah831x_get_hrv(void);\r
\r
-void pah831x_get_ecg_afib(uint8_t *ecg_hr, uint8_t *afib_result);\r
+void pah831x_get_ecg_afib(uint8_t *ecg_hr, uint8_t *afib_result, uint8_t *status);\r
\r
void pah831x_get_ecg_bp(int *sbp, int *dbp, uint8_t *status);\r
\r