class heart_rate
pixart_heart_rate.h@8:70ed6c78681c, 2017-10-27 (annotated)
- 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?
User | Revision | Line number | New 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 |