From 59e751eb2ac5a8ec1878f5b8e6fca5dc90f12d9c Mon Sep 17 00:00:00 2001 From: Tangyuxin <462747508@qq.com> Date: Tue, 5 Apr 2022 19:35:23 +0800 Subject: [PATCH] [sensor]Add blood pressure sensor type (#5766) --- components/drivers/include/drivers/sensor.h | 10 ++++++++++ components/drivers/sensors/sensor.c | 1 + components/drivers/sensors/sensor_cmd.c | 6 ++++++ 3 files changed, 17 insertions(+) diff --git a/components/drivers/include/drivers/sensor.h b/components/drivers/include/drivers/sensor.h index ac57a686b1..ba0afb33a8 100644 --- a/components/drivers/include/drivers/sensor.h +++ b/components/drivers/include/drivers/sensor.h @@ -52,6 +52,7 @@ extern "C" { #define RT_SENSOR_CLASS_SPO2 (18) /* SpO2 sensor */ #define RT_SENSOR_CLASS_IAQ (19) /* IAQ sensor. */ #define RT_SENSOR_CLASS_ETOH (20) /* EtOH sensor. */ +#define RT_SENSOR_CLASS_BP (21) /* Blood Pressure */ /* Sensor vendor types */ @@ -93,6 +94,7 @@ extern "C" { #define RT_SENSOR_UNIT_DMS (16) /* Coordinates unit: DMS */ #define RT_SENSOR_UNIT_DD (17) /* Coordinates unit: DD */ #define RT_SENSOR_UNIT_MGM3 (18) /* Concentration unit: mg/m3 */ +#define RT_SENSOR_UNIT_MMHG (19) /* Blood Pressure unit: mmHg */ /* Sensor communication interface types */ #define RT_SENSOR_INTF_I2C (1 << 0) @@ -192,6 +194,13 @@ struct sensor_3_axis rt_int32_t z; }; +/* Blood Pressure Data Type */ +struct sensor_bp +{ + rt_int32_t sbp; /* SBP : systolic pressure */ + rt_int32_t dbp; /* DBP : diastolic pressure */ +}; + struct coordinates { double longitude; @@ -223,6 +232,7 @@ struct rt_sensor_data rt_uint32_t spo2; /* SpO2 sensor. unit: permillage */ rt_uint32_t iaq; /* IAQ sensor. unit: 1 */ rt_uint32_t etoh; /* EtOH sensor. unit: ppm */ + struct sensor_bp bp; /* BloodPressure. unit: mmHg */ } data; }; diff --git a/components/drivers/sensors/sensor.c b/components/drivers/sensors/sensor.c index fb75ce3a34..aa190ada71 100644 --- a/components/drivers/sensors/sensor.c +++ b/components/drivers/sensors/sensor.c @@ -40,6 +40,7 @@ static char *const sensor_name_str[] = "spo2_", /* SpO2 sensor */ "iaq_", /* IAQ sensor */ "etoh_", /* EtOH sensor */ + "bp_" /* Blood Pressure */ }; /* Sensor interrupt correlation function */ diff --git a/components/drivers/sensors/sensor_cmd.c b/components/drivers/sensors/sensor_cmd.c index 83ccde3145..a0ae8b700b 100755 --- a/components/drivers/sensors/sensor_cmd.c +++ b/components/drivers/sensors/sensor_cmd.c @@ -80,6 +80,9 @@ static void sensor_show_data(rt_size_t num, rt_sensor_t sensor, struct rt_sensor case RT_SENSOR_CLASS_ETOH: LOG_I("num:%3d, EtOH:%5d.%03d ppm, timestamp:%5d", num, sensor_data->data.etoh / 1000, sensor_data->data.etoh % 1000, sensor_data->timestamp); break; + case RT_SENSOR_CLASS_BP: + LOG_I("num:%3d, bp.sbp:%5d mmHg, bp.dbp:%5d mmHg, timestamp:%5d", num, sensor_data->data.bp.sbp, sensor_data->data.bp.dbp, sensor_data->timestamp); + break; default: break; } @@ -409,6 +412,9 @@ static void sensor(int argc, char **argv) case RT_SENSOR_UNIT_PPB: rt_kprintf("unit :ppb\n"); break; + case RT_SENSOR_UNIT_MMHG: + rt_kprintf("unit :mmHg\n"); + break; } rt_kprintf("range_max :%d\n", info.range_max); rt_kprintf("range_min :%d\n", info.range_min);