class heart_rate

Committer:
bell_huang
Date:
Fri Oct 27 08:26:12 2017 +0000
Revision:
8:70ed6c78681c
Parent:
7:95cb4b23a31f
Remove lib

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bell_huang 0:31d7988294aa 1 #ifndef __pixart_heart_rate_h__
bell_huang 0:31d7988294aa 2 #define __pixart_heart_rate_h__
bell_huang 0:31d7988294aa 3
bell_huang 0:31d7988294aa 4
bell_huang 0:31d7988294aa 5 #include "pah8series_data_c.h"
bell_huang 0:31d7988294aa 6
bell_huang 0:31d7988294aa 7 #include <vector>
bell_huang 0:31d7988294aa 8 #include <deque>
bell_huang 0:31d7988294aa 9 #include <stdint.h>
bell_huang 0:31d7988294aa 10
bell_huang 0:31d7988294aa 11
bell_huang 0:31d7988294aa 12 namespace pixart {
bell_huang 0:31d7988294aa 13
bell_huang 0:31d7988294aa 14
bell_huang 1:e9f4fb198b63 15 struct pah_hr_data;
bell_huang 1:e9f4fb198b63 16
bell_huang 0:31d7988294aa 17 class heart_rate {
bell_huang 0:31d7988294aa 18 public:
bell_huang 2:5cb0e405a24c 19 typedef void (*DEBUG_PRINT_HANDLE)(const char *fmt, ...);
bell_huang 0:31d7988294aa 20 typedef uint64_t (*TIME_TO_MILLISEC_HANDLE)(uint64_t time);
bell_huang 0:31d7988294aa 21
bell_huang 0:31d7988294aa 22 enum gravity_mode {
bell_huang 0:31d7988294aa 23 gravity_2g = 2,
bell_huang 0:31d7988294aa 24 gravity_4g = 4,
bell_huang 0:31d7988294aa 25 gravity_8g = 8,
bell_huang 0:31d7988294aa 26 gravity_16g = 16,
bell_huang 0:31d7988294aa 27 };
bell_huang 0:31d7988294aa 28
bell_huang 0:31d7988294aa 29 enum ret_msg {
bell_huang 0:31d7988294aa 30 ret_not_ready,
bell_huang 0:31d7988294aa 31 ret_success,
bell_huang 0:31d7988294aa 32 ret_no_touch,
bell_huang 0:31d7988294aa 33 ret_signal_poor,
bell_huang 0:31d7988294aa 34 ret_fail,
bell_huang 0:31d7988294aa 35 };
bell_huang 0:31d7988294aa 36
bell_huang 0:31d7988294aa 37 struct ppg_sample {
bell_huang 0:31d7988294aa 38 int32_t ch1;
bell_huang 0:31d7988294aa 39 int32_t ch2;
bell_huang 0:31d7988294aa 40 bool is_touched;
bell_huang 0:31d7988294aa 41 uint64_t timestamp;
bell_huang 0:31d7988294aa 42 };
bell_huang 0:31d7988294aa 43
bell_huang 0:31d7988294aa 44 struct accel_sample {
bell_huang 0:31d7988294aa 45 float x;
bell_huang 0:31d7988294aa 46 float y;
bell_huang 0:31d7988294aa 47 float z;
bell_huang 0:31d7988294aa 48 uint64_t timestamp;
bell_huang 0:31d7988294aa 49 };
bell_huang 0:31d7988294aa 50
bell_huang 0:31d7988294aa 51 struct result {
bell_huang 0:31d7988294aa 52 ret_msg ret;
bell_huang 0:31d7988294aa 53 float hr;
bell_huang 0:31d7988294aa 54 int hr_trust_level;
bell_huang 0:31d7988294aa 55 };
bell_huang 0:31d7988294aa 56
bell_huang 0:31d7988294aa 57 public:
bell_huang 0:31d7988294aa 58 heart_rate(TIME_TO_MILLISEC_HANDLE time_to_millisec_handler, size_t ppg_max_sample_num = 40, size_t accel_max_sample_num = 100);
bell_huang 0:31d7988294aa 59 ~heart_rate();
bell_huang 0:31d7988294aa 60
bell_huang 7:95cb4b23a31f 61 void enable_debug_print(DEBUG_PRINT_HANDLE handler);
bell_huang 0:31d7988294aa 62
bell_huang 7:95cb4b23a31f 63 bool init(gravity_mode gravity = gravity_4g);
bell_huang 1:e9f4fb198b63 64
bell_huang 0:31d7988294aa 65 void reset();
bell_huang 0:31d7988294aa 66
bell_huang 0:31d7988294aa 67 bool set_ppg_sample(const ppg_sample &ppg_sample);
bell_huang 0:31d7988294aa 68 bool set_accel_sample(const accel_sample &accel_sample);
bell_huang 0:31d7988294aa 69
bell_huang 0:31d7988294aa 70 const result& get_result() const;
bell_huang 0:31d7988294aa 71
bell_huang 0:31d7988294aa 72
bell_huang 0:31d7988294aa 73 private:
bell_huang 0:31d7988294aa 74 static int gravity_to_hr_alg_gsensor_mode(gravity_mode gravity);
bell_huang 0:31d7988294aa 75 static int16_t gravity_to_int16(gravity_mode gravity, float value);
bell_huang 0:31d7988294aa 76
bell_huang 0:31d7988294aa 77 static const float GRAVITY_OF_EARTH;
bell_huang 0:31d7988294aa 78 static const size_t PPG_SYNC_COUNT;
bell_huang 0:31d7988294aa 79 static const size_t ACCEL_AXIS_NUM;
bell_huang 0:31d7988294aa 80
bell_huang 0:31d7988294aa 81 private:
bell_huang 0:31d7988294aa 82 void flush();
bell_huang 4:90dfc6d7461b 83 void log_pah8series_data_header(uint32_t ch_num, uint32_t ir_ch_num, uint32_t g_sensor_mode);
bell_huang 1:e9f4fb198b63 84 void log_pah8series_data(const pah_hr_data *pxialg_data);
bell_huang 0:31d7988294aa 85
bell_huang 0:31d7988294aa 86 const size_t PPG_MAX_SAMPLE_NUM;
bell_huang 0:31d7988294aa 87 const size_t PPG_CH_NUM;
bell_huang 0:31d7988294aa 88 const size_t ACCEL_MAX_SAMPLE_NUM;
bell_huang 0:31d7988294aa 89
bell_huang 2:5cb0e405a24c 90 DEBUG_PRINT_HANDLE m_debug_print_handler;
bell_huang 0:31d7988294aa 91 TIME_TO_MILLISEC_HANDLE m_time_to_millisec_handler;
bell_huang 0:31d7988294aa 92 void *m_alg_buffer;
bell_huang 0:31d7988294aa 93 gravity_mode m_gravity_mode;
bell_huang 0:31d7988294aa 94
bell_huang 0:31d7988294aa 95 std::deque<ppg_sample> m_ppg_sample_queue;
bell_huang 0:31d7988294aa 96 std::deque<accel_sample> m_accel_sample_queue;
bell_huang 0:31d7988294aa 97
bell_huang 0:31d7988294aa 98 uint64_t m_last_report_timestamp;
bell_huang 0:31d7988294aa 99 uint8_t m_frame_count;
bell_huang 0:31d7988294aa 100
bell_huang 0:31d7988294aa 101 result m_result;
bell_huang 0:31d7988294aa 102
bell_huang 0:31d7988294aa 103 };
bell_huang 0:31d7988294aa 104
bell_huang 0:31d7988294aa 105
bell_huang 0:31d7988294aa 106 }
bell_huang 0:31d7988294aa 107
bell_huang 0:31d7988294aa 108
bell_huang 0:31d7988294aa 109 #endif // header guard