#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;
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;
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;
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);
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);
}