From e68a30f7f8a0a8537cde240b507d15619668a2d7 Mon Sep 17 00:00:00 2001 From: Sooyoung Ha Date: Sun, 10 Jul 2016 18:02:07 +0900 Subject: [PATCH] sensor: add pedometer sensor device Change-Id: I4bf3bf11a0942e82f5bdd371d066864f6a2c8be8 Signed-off-by: Sooyoung Ha --- tizen/src/ecs/ecs_internal.h | 1 + tizen/src/ecs/ecs_msg_device.c | 2 ++ tizen/src/ecs/ecs_sensor.c | 16 +++++++++ tizen/src/ecs/ecs_sensor.h | 1 + tizen/src/hw/virtio/maru_virtio_sensor.c | 45 +++++++++++++++++++++++- tizen/src/hw/virtio/maru_virtio_sensor.h | 14 +++++++- 6 files changed, 77 insertions(+), 2 deletions(-) diff --git a/tizen/src/ecs/ecs_internal.h b/tizen/src/ecs/ecs_internal.h index fbd2b09467..4d0c0e96af 100644 --- a/tizen/src/ecs/ecs_internal.h +++ b/tizen/src/ecs/ecs_internal.h @@ -65,6 +65,7 @@ enum message_action { MSG_ACT_PRESSURE = 116, MSG_ACT_UV = 117, MSG_ACT_HRM = 118, + MSG_ACT_PEDO = 119, MSG_ACT_LOCATION = 120, MSG_ACT_NETBRIDGE = 123 }; diff --git a/tizen/src/ecs/ecs_msg_device.c b/tizen/src/ecs/ecs_msg_device.c index d9919e23f3..d0d884eb0e 100644 --- a/tizen/src/ecs/ecs_msg_device.c +++ b/tizen/src/ecs/ecs_msg_device.c @@ -156,6 +156,8 @@ static void msgproc_device_req_sensor(ECS_Client *ccli, ECS__DeviceReq *msg, cha get_sensor_uv(); } else if (action == MSG_ACT_HRM) { get_sensor_hrm(); + } else if (action == MSG_ACT_PEDO) { + get_sensor_pedo(); } } else { if (data != NULL) { diff --git a/tizen/src/ecs/ecs_sensor.c b/tizen/src/ecs/ecs_sensor.c index f3094ece2a..fb8bee5f8b 100644 --- a/tizen/src/ecs/ecs_sensor.c +++ b/tizen/src/ecs/ecs_sensor.c @@ -442,6 +442,19 @@ static void _req_set_sensor_mag(int len, const char *data) set_sensor_mag(tmp, strlen(tmp)); } +static void _req_set_sensor_pedo(int len, const char *data) +{ + char tmp[TEMP_BUF_SIZE]; + + /* get sensor level */ + len += get_parse_val(data + len, tmp); + + /* value */ + len += get_parse_val(data + len, tmp); + + set_sensor_pedo(tmp, strlen(tmp)); +} + static void set_battery_data(int len, const char *data) { char tmp[TEMP_BUF_SIZE]; @@ -515,6 +528,9 @@ void ecs_sensor_set_injector_data(const char *data) case level_hrm: _req_set_sensor_hrm(len, data); break; + case level_pedo: + _req_set_sensor_pedo(len, data); + break; default: break; } diff --git a/tizen/src/ecs/ecs_sensor.h b/tizen/src/ecs/ecs_sensor.h index 042d431bcd..31802b2c1e 100644 --- a/tizen/src/ecs/ecs_sensor.h +++ b/tizen/src/ecs/ecs_sensor.h @@ -43,6 +43,7 @@ enum injector_level { level_pressure = 20, level_uv = 21, level_hrm = 22, + level_pedo = 23, }; /* skin rotation request */ diff --git a/tizen/src/hw/virtio/maru_virtio_sensor.c b/tizen/src/hw/virtio/maru_virtio_sensor.c index 612aceec6c..b5012a57dc 100644 --- a/tizen/src/hw/virtio/maru_virtio_sensor.c +++ b/tizen/src/hw/virtio/maru_virtio_sensor.c @@ -49,6 +49,7 @@ static QemuMutex rot_mutex; static QemuMutex pressure_mutex; static QemuMutex uv_mutex; static QemuMutex hrm_mutex; +static QemuMutex pedo_mutex; static char accel_xyz[__MAX_BUF_SENSOR] = {'1', '0', '0', ',', '9', '8', '0', '6', '6', '5', ',', '1', '0', '0'}; @@ -93,6 +94,10 @@ static int hrm_rri = 600; static int hrm_enable; static int hrm_delay = 200000000; +static int pedo_value = 1; +static int pedo_enable = 1; +static int pedo_delay = 200000000; + VirtIOSENSOR *vsensor; static int sensor_capability; @@ -135,6 +140,9 @@ static type_action get_action(enum sensor_types type) case sensor_type_hrm: action = ACTION_HRM; break; + case sensor_type_pedo: + action = ACTION_PEDO; + break; default: break; } @@ -361,6 +369,21 @@ static void __set_sensor_data(enum sensor_types type, char *data, int len) sscanf(data, "%d", &hrm_delay); qemu_mutex_unlock(&hrm_mutex); break; + case sensor_type_pedo: + qemu_mutex_lock(&pedo_mutex); + sscanf(data, "%d", &pedo_value); + qemu_mutex_unlock(&pedo_mutex); + break; + case sensor_type_pedo_enable: + qemu_mutex_lock(&pedo_mutex); + sscanf(data, "%d", &pedo_enable); + qemu_mutex_unlock(&pedo_mutex); + break; + case sensor_type_pedo_delay: + qemu_mutex_lock(&pedo_mutex); + sscanf(data, "%d", &pedo_delay); + qemu_mutex_unlock(&pedo_mutex); + break; default: return; } @@ -369,6 +392,7 @@ static void __set_sensor_data(enum sensor_types type, char *data, int len) static void __get_sensor_data(enum sensor_types type, char *msg_info) { if (msg_info == NULL) { + LOG_WARNING("msg_info is null\n"); return; } @@ -538,6 +562,21 @@ static void __get_sensor_data(enum sensor_types type, char *msg_info) sprintf(msg_info, "%d", hrm_delay); qemu_mutex_unlock(&hrm_mutex); break; + case sensor_type_pedo: + qemu_mutex_lock(&pedo_mutex); + sprintf(msg_info, "%d", pedo_value); + qemu_mutex_unlock(&pedo_mutex); + break; + case sensor_type_pedo_enable: + qemu_mutex_lock(&pedo_mutex); + sprintf(msg_info, "%d", pedo_enable); + qemu_mutex_unlock(&pedo_mutex); + break; + case sensor_type_pedo_delay: + qemu_mutex_lock(&pedo_mutex); + sprintf(msg_info, "%d", pedo_delay); + qemu_mutex_unlock(&pedo_mutex); + break; default: return; } @@ -659,8 +698,10 @@ static int set_capability(char *sensor) return sensor_cap_uv; } else if (!strncmp(sensor, SENSOR_NAME_HRM, 3)) { return sensor_cap_hrm; + } else if (!strncmp(sensor, SENSOR_NAME_PEDO, 4)) { + return sensor_cap_pedo; } else { - LOG_SEVERE("unknown sensor request: %s", sensor); + LOG_SEVERE("unknown sensor request: %s\n", sensor); } return 0; @@ -711,6 +752,7 @@ static void virtio_sensor_realize(DeviceState *dev, Error **errp) qemu_mutex_init(&pressure_mutex); qemu_mutex_init(&uv_mutex); qemu_mutex_init(&hrm_mutex); + qemu_mutex_init(&pedo_mutex); vsensor->vq = virtio_add_queue(&vsensor->vdev, 64, virtio_sensor_vq); @@ -735,6 +777,7 @@ static void virtio_sensor_unrealize(DeviceState *dev, Error **errp) qemu_mutex_destroy(&pressure_mutex); qemu_mutex_destroy(&uv_mutex); qemu_mutex_destroy(&hrm_mutex); + qemu_mutex_destroy(&pedo_mutex); virtio_cleanup(vdev); } diff --git a/tizen/src/hw/virtio/maru_virtio_sensor.h b/tizen/src/hw/virtio/maru_virtio_sensor.h index f7f14b42e1..1c0a743934 100644 --- a/tizen/src/hw/virtio/maru_virtio_sensor.h +++ b/tizen/src/hw/virtio/maru_virtio_sensor.h @@ -80,6 +80,9 @@ enum sensor_types { sensor_type_hrm_rri, sensor_type_hrm_enable, sensor_type_hrm_delay, + sensor_type_pedo, + sensor_type_pedo_enable, + sensor_type_pedo_delay, sensor_type_max }; @@ -93,7 +96,8 @@ enum sensor_capabilities { sensor_cap_haptic = 0x0040, sensor_cap_pressure = 0x0080, sensor_cap_uv = 0x0100, - sensor_cap_hrm = 0x0200 + sensor_cap_hrm = 0x0200, + sensor_cap_pedo = 0x0400 }; #define MESSAGE_TYPE_SENSOR "sensor" @@ -109,6 +113,7 @@ enum sensor_capabilities { #define ACTION_PRESSURE 116 #define ACTION_UV 117 #define ACTION_HRM 118 +#define ACTION_PEDO 119 #define ATTRIBUTE_NAME_SENSORS "sensors" @@ -122,6 +127,7 @@ enum sensor_capabilities { #define SENSOR_NAME_PRESSURE "press" #define SENSOR_NAME_UV "uv" #define SENSOR_NAME_HRM "hrm" +#define SENSOR_NAME_PEDO "pedo" #define SENSOR_CAP_TOKEN "&" @@ -202,6 +208,12 @@ void req_sensor_data(enum sensor_types type, enum request_cmd req, char *data, i #define set_sensor_hrm_rri(data, len) \ req_sensor_data(sensor_type_hrm_rri, request_set, data, len); +#define get_sensor_pedo() \ + req_sensor_data(sensor_type_pedo, request_get, NULL, 0); + +#define set_sensor_pedo(data, len) \ + req_sensor_data(sensor_type_pedo, request_set, data, len); + #ifdef __cplusplus } -- 2.34.1