From fff6060a4ba1d424bb23d6ec472561f0c006c630 Mon Sep 17 00:00:00 2001 From: Jinhyung Choi Date: Mon, 23 Jun 2014 17:21:50 +0900 Subject: [PATCH] sensors: changed from pthread_mutex_t to QemuMutex Change-Id: Icaed4d13618fbe025c67591963890550a6cf4d3d Signed-off-by: Jinhyung Choi --- tizen/src/hw/maru_virtio_sensor.c | 182 ++++++++++++++++-------------- 1 file changed, 97 insertions(+), 85 deletions(-) diff --git a/tizen/src/hw/maru_virtio_sensor.c b/tizen/src/hw/maru_virtio_sensor.c index 19eecfef86..e1aacaae02 100644 --- a/tizen/src/hw/maru_virtio_sensor.c +++ b/tizen/src/hw/maru_virtio_sensor.c @@ -42,11 +42,11 @@ MULTI_DEBUG_CHANNEL(qemu, virtio-sensor); #define _MAX_BUF 1024 #define __MAX_BUF_SENSOR 32 -static pthread_mutex_t accel_mutex = PTHREAD_MUTEX_INITIALIZER; -static pthread_mutex_t geo_mutex = PTHREAD_MUTEX_INITIALIZER; -static pthread_mutex_t gyro_mutex = PTHREAD_MUTEX_INITIALIZER; -static pthread_mutex_t light_mutex = PTHREAD_MUTEX_INITIALIZER; -static pthread_mutex_t proxi_mutex = PTHREAD_MUTEX_INITIALIZER; +static QemuMutex accel_mutex; +static QemuMutex geo_mutex; +static QemuMutex gyro_mutex; +static QemuMutex light_mutex; +static QemuMutex proxi_mutex; static char accel_xyz [__MAX_BUF_SENSOR] = {'0',',','9','8','0','6','6','5',',','0'}; static int accel_enable = 0; @@ -156,105 +156,105 @@ static void __set_sensor_data (enum sensor_types type, char* data, int len) switch (type) { case sensor_type_accel: - pthread_mutex_lock(&accel_mutex); + qemu_mutex_lock(&accel_mutex); strcpy(accel_xyz, data); - pthread_mutex_unlock(&accel_mutex); + qemu_mutex_unlock(&accel_mutex); break; case sensor_type_accel_enable: - pthread_mutex_lock(&accel_mutex); + qemu_mutex_lock(&accel_mutex); sscanf(data, "%d", &accel_enable); - pthread_mutex_unlock(&accel_mutex); + qemu_mutex_unlock(&accel_mutex); break; case sensor_type_accel_delay: - pthread_mutex_lock(&accel_mutex); + qemu_mutex_lock(&accel_mutex); sscanf(data, "%d", &accel_delay); - pthread_mutex_unlock(&accel_mutex); + qemu_mutex_unlock(&accel_mutex); break; case sensor_type_gyro_enable: - pthread_mutex_lock(&gyro_mutex); + qemu_mutex_lock(&gyro_mutex); sscanf(data, "%d", &gyro_enable); - pthread_mutex_unlock(&gyro_mutex); + qemu_mutex_unlock(&gyro_mutex); break; case sensor_type_gyro_delay: - pthread_mutex_lock(&gyro_mutex); + qemu_mutex_lock(&gyro_mutex); sscanf(data, "%d", &gyro_delay); - pthread_mutex_unlock(&gyro_mutex); + qemu_mutex_unlock(&gyro_mutex); break; case sensor_type_gyro_x: - pthread_mutex_lock(&gyro_mutex); + qemu_mutex_lock(&gyro_mutex); sscanf(data, "%d", &gyro_x_raw); - pthread_mutex_unlock(&gyro_mutex); + qemu_mutex_unlock(&gyro_mutex); break; case sensor_type_gyro_y: - pthread_mutex_lock(&gyro_mutex); + qemu_mutex_lock(&gyro_mutex); sscanf(data, "%d", &gyro_y_raw); - pthread_mutex_unlock(&gyro_mutex); + qemu_mutex_unlock(&gyro_mutex); break; case sensor_type_gyro_z: - pthread_mutex_lock(&gyro_mutex); + qemu_mutex_lock(&gyro_mutex); sscanf(data, "%d", &gyro_z_raw); - pthread_mutex_unlock(&gyro_mutex); + qemu_mutex_unlock(&gyro_mutex); break; case sensor_type_gyro: - pthread_mutex_lock(&gyro_mutex); + qemu_mutex_lock(&gyro_mutex); sscanf(data, "%d %d %d", &gyro_x_raw, &gyro_y_raw, &gyro_z_raw); - pthread_mutex_unlock(&gyro_mutex); + qemu_mutex_unlock(&gyro_mutex); break; case sensor_type_light_adc: - pthread_mutex_lock(&light_mutex); + qemu_mutex_lock(&light_mutex); sscanf(data, "%d", &light_adc); light_level = (light_adc / 6554) % 10 + 1; - pthread_mutex_unlock(&light_mutex); + qemu_mutex_unlock(&light_mutex); break; case sensor_type_light_level: - pthread_mutex_lock(&light_mutex); + qemu_mutex_lock(&light_mutex); sscanf(data, "%d", &light_level); - pthread_mutex_unlock(&light_mutex); + qemu_mutex_unlock(&light_mutex); break; case sensor_type_light_enable: - pthread_mutex_lock(&light_mutex); + qemu_mutex_lock(&light_mutex); sscanf(data, "%d", &light_enable); - pthread_mutex_unlock(&light_mutex); + qemu_mutex_unlock(&light_mutex); break; case sensor_type_light_delay: - pthread_mutex_lock(&light_mutex); + qemu_mutex_lock(&light_mutex); sscanf(data, "%d", &light_delay); - pthread_mutex_unlock(&light_mutex); + qemu_mutex_unlock(&light_mutex); break; case sensor_type_proxi: - pthread_mutex_lock(&proxi_mutex); + qemu_mutex_lock(&proxi_mutex); sscanf(data, "%d", &proxi_vo); - pthread_mutex_unlock(&proxi_mutex); + qemu_mutex_unlock(&proxi_mutex); break; case sensor_type_proxi_enable: - pthread_mutex_lock(&proxi_mutex); + qemu_mutex_lock(&proxi_mutex); sscanf(data, "%d", &proxi_enable); - pthread_mutex_unlock(&proxi_mutex); + qemu_mutex_unlock(&proxi_mutex); break; case sensor_type_proxi_delay: - pthread_mutex_lock(&proxi_mutex); + qemu_mutex_lock(&proxi_mutex); sscanf(data, "%d", &proxi_delay); - pthread_mutex_unlock(&proxi_mutex); + qemu_mutex_unlock(&proxi_mutex); break; case sensor_type_mag: - pthread_mutex_lock(&geo_mutex); + qemu_mutex_lock(&geo_mutex); strcpy(geo_tesla, data); - pthread_mutex_unlock(&geo_mutex); + qemu_mutex_unlock(&geo_mutex); break; case sensor_type_tilt: - pthread_mutex_lock(&geo_mutex); + qemu_mutex_lock(&geo_mutex); strcpy(geo_raw, data); - pthread_mutex_unlock(&geo_mutex); + qemu_mutex_unlock(&geo_mutex); break; case sensor_type_geo_enable: - pthread_mutex_lock(&geo_mutex); + qemu_mutex_lock(&geo_mutex); sscanf(data, "%d", &geo_enable); - pthread_mutex_unlock(&geo_mutex); + qemu_mutex_unlock(&geo_mutex); break; case sensor_type_geo_delay: - pthread_mutex_lock(&geo_mutex); + qemu_mutex_lock(&geo_mutex); sscanf(data, "%d", &geo_delay); - pthread_mutex_unlock(&geo_mutex); + qemu_mutex_unlock(&geo_mutex); break; default: return; @@ -272,105 +272,105 @@ static void __get_sensor_data(enum sensor_types type, char* msg_info) sprintf(msg_info, "%d", sensor_capability); break; case sensor_type_accel: - pthread_mutex_lock(&accel_mutex); + qemu_mutex_lock(&accel_mutex); strcpy(msg_info, accel_xyz); - pthread_mutex_unlock(&accel_mutex); + qemu_mutex_unlock(&accel_mutex); break; case sensor_type_accel_enable: - pthread_mutex_lock(&accel_mutex); + qemu_mutex_lock(&accel_mutex); sprintf(msg_info, "%d", accel_enable); - pthread_mutex_unlock(&accel_mutex); + qemu_mutex_unlock(&accel_mutex); break; case sensor_type_accel_delay: - pthread_mutex_lock(&accel_mutex); + qemu_mutex_lock(&accel_mutex); sprintf(msg_info, "%d", accel_delay); - pthread_mutex_unlock(&accel_mutex); + qemu_mutex_unlock(&accel_mutex); break; case sensor_type_mag: - pthread_mutex_lock(&geo_mutex); + qemu_mutex_lock(&geo_mutex); strcpy(msg_info, geo_tesla); - pthread_mutex_unlock(&geo_mutex); + qemu_mutex_unlock(&geo_mutex); break; case sensor_type_tilt: - pthread_mutex_lock(&geo_mutex); + qemu_mutex_lock(&geo_mutex); strcpy(msg_info, geo_raw); - pthread_mutex_unlock(&geo_mutex); + qemu_mutex_unlock(&geo_mutex); break; case sensor_type_geo_enable: - pthread_mutex_lock(&geo_mutex); + qemu_mutex_lock(&geo_mutex); sprintf(msg_info, "%d", geo_enable); - pthread_mutex_unlock(&geo_mutex); + qemu_mutex_unlock(&geo_mutex); break; case sensor_type_geo_delay: - pthread_mutex_lock(&geo_mutex); + qemu_mutex_lock(&geo_mutex); sprintf(msg_info, "%d", geo_delay); - pthread_mutex_unlock(&geo_mutex); + qemu_mutex_unlock(&geo_mutex); break; case sensor_type_gyro: - pthread_mutex_lock(&gyro_mutex); + qemu_mutex_lock(&gyro_mutex); sprintf(msg_info, "%d,%d,%d", gyro_x_raw, gyro_y_raw, gyro_z_raw); - pthread_mutex_unlock(&gyro_mutex); + qemu_mutex_unlock(&gyro_mutex); break; case sensor_type_gyro_enable: - pthread_mutex_lock(&gyro_mutex); + qemu_mutex_lock(&gyro_mutex); sprintf(msg_info, "%d", gyro_enable); - pthread_mutex_unlock(&gyro_mutex); + qemu_mutex_unlock(&gyro_mutex); break; case sensor_type_gyro_delay: - pthread_mutex_lock(&gyro_mutex); + qemu_mutex_lock(&gyro_mutex); sprintf(msg_info, "%d", gyro_delay); - pthread_mutex_unlock(&gyro_mutex); + qemu_mutex_unlock(&gyro_mutex); break; case sensor_type_gyro_x: - pthread_mutex_lock(&gyro_mutex); + qemu_mutex_lock(&gyro_mutex); sprintf(msg_info, "%d", gyro_x_raw); - pthread_mutex_unlock(&gyro_mutex); + qemu_mutex_unlock(&gyro_mutex); break; case sensor_type_gyro_y: - pthread_mutex_lock(&gyro_mutex); + qemu_mutex_lock(&gyro_mutex); sprintf(msg_info, "%d", gyro_y_raw); - pthread_mutex_unlock(&gyro_mutex); + qemu_mutex_unlock(&gyro_mutex); break; case sensor_type_gyro_z: - pthread_mutex_lock(&gyro_mutex); + qemu_mutex_lock(&gyro_mutex); sprintf(msg_info, "%d", gyro_z_raw); - pthread_mutex_unlock(&gyro_mutex); + qemu_mutex_unlock(&gyro_mutex); break; case sensor_type_light: case sensor_type_light_adc: - pthread_mutex_lock(&light_mutex); + qemu_mutex_lock(&light_mutex); sprintf(msg_info, "%d", light_adc); - pthread_mutex_unlock(&light_mutex); + qemu_mutex_unlock(&light_mutex); break; case sensor_type_light_level: - pthread_mutex_lock(&light_mutex); + qemu_mutex_lock(&light_mutex); sprintf(msg_info, "%d", light_level); - pthread_mutex_unlock(&light_mutex); + qemu_mutex_unlock(&light_mutex); break; case sensor_type_light_enable: - pthread_mutex_lock(&light_mutex); + qemu_mutex_lock(&light_mutex); sprintf(msg_info, "%d", light_enable); - pthread_mutex_unlock(&light_mutex); + qemu_mutex_unlock(&light_mutex); break; case sensor_type_light_delay: - pthread_mutex_lock(&light_mutex); + qemu_mutex_lock(&light_mutex); sprintf(msg_info, "%d", light_delay); - pthread_mutex_unlock(&light_mutex); + qemu_mutex_unlock(&light_mutex); break; case sensor_type_proxi: - pthread_mutex_lock(&proxi_mutex); + qemu_mutex_lock(&proxi_mutex); sprintf(msg_info, "%d", proxi_vo); - pthread_mutex_unlock(&proxi_mutex); + qemu_mutex_unlock(&proxi_mutex); break; case sensor_type_proxi_enable: - pthread_mutex_lock(&proxi_mutex); + qemu_mutex_lock(&proxi_mutex); sprintf(msg_info, "%d", proxi_enable); - pthread_mutex_unlock(&proxi_mutex); + qemu_mutex_unlock(&proxi_mutex); break; case sensor_type_proxi_delay: - pthread_mutex_lock(&proxi_mutex); + qemu_mutex_lock(&proxi_mutex); sprintf(msg_info, "%d", proxi_delay); - pthread_mutex_unlock(&proxi_mutex); + qemu_mutex_unlock(&proxi_mutex); break; default: return; @@ -523,6 +523,12 @@ static void virtio_sensor_realize(DeviceState *dev, Error **errp) return; } + qemu_mutex_init(&accel_mutex); + qemu_mutex_init(&gyro_mutex); + qemu_mutex_init(&geo_mutex); + qemu_mutex_init(&light_mutex); + qemu_mutex_init(&proxi_mutex); + vsensor->vq = virtio_add_queue(&vsensor->vdev, 64, virtio_sensor_vq); INFO("initialized sensor type: %s\n", vsensor->sensors); @@ -537,6 +543,12 @@ static void virtio_sensor_unrealize(DeviceState *dev, Error **errp) VirtIODevice *vdev = VIRTIO_DEVICE(dev); INFO("destroy sensor device\n"); + qemu_mutex_destroy(&accel_mutex); + qemu_mutex_destroy(&gyro_mutex); + qemu_mutex_destroy(&geo_mutex); + qemu_mutex_destroy(&light_mutex); + qemu_mutex_destroy(&proxi_mutex); + virtio_cleanup(vdev); } -- 2.34.1