sensor: add pedometer sensor device
authorSooyoung Ha <yoosah.ha@samsung.com>
Sun, 10 Jul 2016 09:02:07 +0000 (18:02 +0900)
committerSooyoung Ha <yoosah.ha@samsung.com>
Thu, 28 Jul 2016 09:05:21 +0000 (18:05 +0900)
Change-Id: I4bf3bf11a0942e82f5bdd371d066864f6a2c8be8
Signed-off-by: Sooyoung Ha <yoosah.ha@samsung.com>
tizen/src/ecs/ecs_internal.h
tizen/src/ecs/ecs_msg_device.c
tizen/src/ecs/ecs_sensor.c
tizen/src/ecs/ecs_sensor.h
tizen/src/hw/virtio/maru_virtio_sensor.c
tizen/src/hw/virtio/maru_virtio_sensor.h

index fbd2b09..4d0c0e9 100644 (file)
@@ -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
 };
index d9919e2..d0d884e 100644 (file)
@@ -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) {
index f3094ec..fb8bee5 100644 (file)
@@ -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;
     }
index 042d431..31802b2 100644 (file)
@@ -43,6 +43,7 @@ enum injector_level {
     level_pressure = 20,
     level_uv = 21,
     level_hrm = 22,
+    level_pedo = 23,
 };
 
 /* skin rotation request */
index 612acee..b5012a5 100644 (file)
@@ -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);
 }
index f7f14b4..1c0a743 100644 (file)
@@ -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
 }