driver/sensor: support new sensor type:ECG,PPG,Imdepance

Signed-off-by: Jiuzhu Dong <dongjiuzhu1@xiaomi.com>
This commit is contained in:
Jiuzhu Dong 2021-10-19 10:21:03 +08:00 committed by Xiang Xiao
parent 26fedb2770
commit f1f0bcc521
2 changed files with 51 additions and 1 deletions

View File

@ -125,6 +125,9 @@ static const struct sensor_info g_sensor_info[] =
{sizeof(struct sensor_event_dust), "dust"},
{sizeof(struct sensor_event_hrate), "hrate"},
{sizeof(struct sensor_event_hbeat), "hbeat"},
{sizeof(struct sensor_event_ecg), "ecg"},
{sizeof(struct sensor_event_ppg), "ppg"},
{sizeof(struct sensor_event_impd), "impd"},
};
static const struct file_operations g_sensor_fops =

View File

@ -217,9 +217,37 @@
#define SENSOR_TYPE_HEART_BEAT 24
/* ECG (Electrocardiogram)
* A sensor of this type returns the ECG voltage in μV. Sensors may amplify
* the input ECG signal. Here the ECG voltage is the un-amplified ECG
* voltage.
*/
#define SENSOR_TYPE_ECG 25
/* PPG (Photoplethysmography)
* A sensor of this type returns the PPG measurements in counts. The PPG
* measurements come from photodiode and following current amplifiers, where
* the photodiode switches reflected light intensity to current. Here the PPG
* value means the ADC counts, since the LED lightness, the photodiode model,
* the reflect-ratio, and the integration time of ADC varies with different
* measurements, while the useful information of PPG is the not the magnitude
* but the shape of the waveform.
*/
#define SENSOR_TYPE_PPG 26
/* Imdepance
* A sensor of this type returns the impedance measurements. An impedance
* is a complex number, which consists of a real part(resistance) and an
* imaginary part(reactance). Both of them are in uint Ohm(Ω).
*/
#define SENSOR_TYPE_IMPEDANCE 27
/* The total number of sensor */
#define SENSOR_TYPE_COUNT 25
#define SENSOR_TYPE_COUNT 28
/****************************************************************************
* Inline Functions
@ -414,6 +442,25 @@ struct sensor_event_hbeat /* Type: Heart Beat */
float beat; /* Units is times/minutes */
};
struct sensor_event_ecg /* Type: ECG */
{
uint64_t timestamp; /* Unit is microseconds */
float ecg; /* Unit is μV */
};
struct sensor_event_ppg /* Type: PPG */
{
uint64_t timestamp; /* Unit is microseconds */
uint32_t ppg; /* Unit is ADC counts */
};
struct sensor_event_impd /* Type: Impedance */
{
uint64_t timestamp; /* Unit is microseconds */
float real; /* Real part, unit is Ohm(Ω) */
float imag; /* Imaginary part, unit is Ohm(Ω) */
};
/* The sensor lower half driver interface */
struct sensor_lowerhalf_s;