class heart_rate

Committer:
bell_huang
Date:
Fri Oct 27 05:55:57 2017 +0000
Revision:
0:31d7988294aa
Child:
1:e9f4fb198b63
Init version

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 0:31d7988294aa 15 class heart_rate {
bell_huang 0:31d7988294aa 16 public:
bell_huang 0:31d7988294aa 17 typedef uint64_t (*TIME_TO_MILLISEC_HANDLE)(uint64_t time);
bell_huang 0:31d7988294aa 18
bell_huang 0:31d7988294aa 19 enum gravity_mode {
bell_huang 0:31d7988294aa 20 gravity_2g = 2,
bell_huang 0:31d7988294aa 21 gravity_4g = 4,
bell_huang 0:31d7988294aa 22 gravity_8g = 8,
bell_huang 0:31d7988294aa 23 gravity_16g = 16,
bell_huang 0:31d7988294aa 24 };
bell_huang 0:31d7988294aa 25
bell_huang 0:31d7988294aa 26 enum ret_msg {
bell_huang 0:31d7988294aa 27 ret_not_ready,
bell_huang 0:31d7988294aa 28 ret_success,
bell_huang 0:31d7988294aa 29 ret_no_touch,
bell_huang 0:31d7988294aa 30 ret_signal_poor,
bell_huang 0:31d7988294aa 31 ret_fail,
bell_huang 0:31d7988294aa 32 };
bell_huang 0:31d7988294aa 33
bell_huang 0:31d7988294aa 34 struct ppg_sample {
bell_huang 0:31d7988294aa 35 int32_t ch1;
bell_huang 0:31d7988294aa 36 int32_t ch2;
bell_huang 0:31d7988294aa 37 bool is_touched;
bell_huang 0:31d7988294aa 38 uint64_t timestamp;
bell_huang 0:31d7988294aa 39 };
bell_huang 0:31d7988294aa 40
bell_huang 0:31d7988294aa 41 struct accel_sample {
bell_huang 0:31d7988294aa 42 float x;
bell_huang 0:31d7988294aa 43 float y;
bell_huang 0:31d7988294aa 44 float z;
bell_huang 0:31d7988294aa 45 uint64_t timestamp;
bell_huang 0:31d7988294aa 46 };
bell_huang 0:31d7988294aa 47
bell_huang 0:31d7988294aa 48 struct result {
bell_huang 0:31d7988294aa 49 ret_msg ret;
bell_huang 0:31d7988294aa 50 float hr;
bell_huang 0:31d7988294aa 51 int hr_trust_level;
bell_huang 0:31d7988294aa 52 };
bell_huang 0:31d7988294aa 53
bell_huang 0:31d7988294aa 54 public:
bell_huang 0:31d7988294aa 55 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 56 ~heart_rate();
bell_huang 0:31d7988294aa 57
bell_huang 0:31d7988294aa 58 bool init(gravity_mode gravity = gravity_4g);
bell_huang 0:31d7988294aa 59
bell_huang 0:31d7988294aa 60 void reset();
bell_huang 0:31d7988294aa 61
bell_huang 0:31d7988294aa 62 bool set_ppg_sample(const ppg_sample &ppg_sample);
bell_huang 0:31d7988294aa 63 bool set_accel_sample(const accel_sample &accel_sample);
bell_huang 0:31d7988294aa 64
bell_huang 0:31d7988294aa 65 const result& get_result() const;
bell_huang 0:31d7988294aa 66
bell_huang 0:31d7988294aa 67
bell_huang 0:31d7988294aa 68 private:
bell_huang 0:31d7988294aa 69 static int gravity_to_hr_alg_gsensor_mode(gravity_mode gravity);
bell_huang 0:31d7988294aa 70 static int16_t gravity_to_int16(gravity_mode gravity, float value);
bell_huang 0:31d7988294aa 71
bell_huang 0:31d7988294aa 72 static const float GRAVITY_OF_EARTH;
bell_huang 0:31d7988294aa 73 static const size_t PPG_SYNC_COUNT;
bell_huang 0:31d7988294aa 74 static const size_t ACCEL_AXIS_NUM;
bell_huang 0:31d7988294aa 75
bell_huang 0:31d7988294aa 76 private:
bell_huang 0:31d7988294aa 77 void flush();
bell_huang 0:31d7988294aa 78
bell_huang 0:31d7988294aa 79 const size_t PPG_MAX_SAMPLE_NUM;
bell_huang 0:31d7988294aa 80 const size_t PPG_CH_NUM;
bell_huang 0:31d7988294aa 81 const size_t ACCEL_MAX_SAMPLE_NUM;
bell_huang 0:31d7988294aa 82
bell_huang 0:31d7988294aa 83 TIME_TO_MILLISEC_HANDLE m_time_to_millisec_handler;
bell_huang 0:31d7988294aa 84 void *m_alg_buffer;
bell_huang 0:31d7988294aa 85 gravity_mode m_gravity_mode;
bell_huang 0:31d7988294aa 86
bell_huang 0:31d7988294aa 87 std::deque<ppg_sample> m_ppg_sample_queue;
bell_huang 0:31d7988294aa 88 std::deque<accel_sample> m_accel_sample_queue;
bell_huang 0:31d7988294aa 89
bell_huang 0:31d7988294aa 90 uint64_t m_last_report_timestamp;
bell_huang 0:31d7988294aa 91 uint8_t m_frame_count;
bell_huang 0:31d7988294aa 92
bell_huang 0:31d7988294aa 93 result m_result;
bell_huang 0:31d7988294aa 94
bell_huang 0:31d7988294aa 95 };
bell_huang 0:31d7988294aa 96
bell_huang 0:31d7988294aa 97
bell_huang 0:31d7988294aa 98 }
bell_huang 0:31d7988294aa 99
bell_huang 0:31d7988294aa 100
bell_huang 0:31d7988294aa 101 #endif // header guard